最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

mysql - Database Connection Issue using docker compose: Access Denied – Hibernate Fails to Initialize JPA - Stack Overflow

programmeradmin4浏览0评论

I'm encountering an access denied error when trying to connect to MySQL from my Spring Boot application. Here's the relevant part of the error log:

SQL Error: 1045, SQLState: 28000
Access denied for user 'RoadHaulageUser'@'172.18.0.3' (using password: YES)

app-1  | 2025-02-19T12:40:13.593Z ERROR 202 --- [RoadHaulage] [           main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)    
app-1  | 2025-02-19T12:40:13.595Z  WARN 202 --- [RoadHaulage] [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: .springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested s
ervice [.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
app-1  | 2025-02-19T12:40:13.599Z  INFO 202 --- [RoadHaulage] [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
app-1  | 2025-02-19T12:40:13.614Z  INFO 202 --- [RoadHaulage] [           main] .s.b.a.l.ConditionEvaluationReportLogger :                                                                                                          
app-1  | 
app-1  | Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.                                                                                                
app-1  | 2025-02-19T12:40:13.633Z ERROR 202 --- [RoadHaulage] [           main] o.s.boot.SpringApplication               : Application run failed      
FROM openjdk:23-jdk-slim

WORKDIR /app

COPY build.gradle settings.gradle ./
COPY gradlew ./
COPY gradle ./gradle
COPY src ./src
COPY document ./document
COPY db ./db

RUN ./gradlew build --no-daemon

CMD ["./gradlew", "bootRun"]
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      SPRING_APPLICATION_NAME: RoadHaulage
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/${MYSQL_DB_NAME}
      SPRING_DATASOURCE_USERNAME: ${MYSQL_USER_NAME}
      SPRING_DATASOURCE_PASSWORD: ${MYSQL_USER_PASSWORD}
      SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver
      SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT_SQL: false
      SPRING_JPA_HIBERNATE_DDL_AUTO: update
      SPRING_JPA_SHOW_SQL: true
      SPRING_JPA_OPEN_IN_VIEW: false
      SPRING_MAIL_HOST: smtp.gmail
      SPRING_MAIL_PORT: 587
      SPRING_MAIL_USERNAME: ${EMAIL_USERNAME}
      SPRING_MAIL_PASSWORD: ${EMAIL_PASSWORD}
      SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH: true
      SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE: true
      SERVER_PORT: 8080
    depends_on:
      - db
    env_file:
      - .env

  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DB_NAME}
      MYSQL_USER: ${MYSQL_USER_NAME}
      MYSQL_PASSWORD: ${MYSQL_USER_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
      - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql

volumes:
  mysql_data:
spring:
  application:
    name: RoadHaulage
  datasource:
    url: jdbc:mysql://db:3306/${MYSQL_DB_NAME}
    username: ${MYSQL_USER_NAME}
    password: ${MYSQL_USER_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    properties:
      hibernate:
        format-sql: false
    hibernate:
      ddl-auto: update
    show-sql: true
    open-in-view: false
  mail:
    host: smtp.gmail
    port: 587
    username: ${EMAIL_USERNAME}
    password: ${EMAIL_PASSWORD}
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
server:
  port: 8080
CREATE DATABASE IF NOT EXISTS dbname;
CREATE USER IF NOT EXISTS 'dbuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'%';
FLUSH PRIVILEGES;

File structure

Checked Configuration: I verified that the environment variables in my .env file are correctly set with the right credentials (MYSQL_DB_NAME, MYSQL_USER_NAME, MYSQL_USER_PASSWORD). I expected this would allow my application to connect to the MySQL database without any access issues.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论