使用MySQL对SpringBoot应用进行对接

nhaq1z21  于 2023-08-02  发布在  Spring
关注(0)|答案(2)|浏览(130)

我的spring Boot 应用程序在本地运行时工作正常。但是当我把它放在docker上时,它会抛出错误,说mysql连接无法建立
控制台出错

srikulamedura-skm-server-1  |   at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.9.jar!/:6.0.9]
srikulamedura-skm-server-1  |   at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.0.9.jar!/:6.0.9]
srikulamedura-skm-server-1  |   at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.0.9.jar!/:6.0.9]
srikulamedura-skm-server-1  |   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816) ~[spring-beans-6.0.9.jar!/:6.0.9]
srikulamedura-skm-server-1  |   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ~[spring-beans-6.0.9.jar!/:6.0.9]
srikulamedura-skm-server-1  |   ... 24 common frames omitted
srikulamedura-skm-server-1  | Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect')
srikulamedura-skm-server-1  |   at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:188) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:87) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:274) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:34) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264) ~[hibernate-core-6.2.2.Final.jar!/:6.2.2.Final]
srikulamedura-skm-server-1  |   ... 39 common frames omitted
srikulamedura-skm-server-1  |
srikulamedura-skm-server-1 exited with code 1

字符串
这是Sping Boot 应用程序的Dockerfile代码

FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]


这是我的docker-compose文件

version: '3.9'

services:
  skm-server:
    build:
      context: sri-kula-medura-server
      dockerfile: Dockerfile
    ports: 
      - "8080:8080"
    networks:
      - skm
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://skmdb:3307/skm_db?createDatabaseIfNotExist=true 
    depends_on:
      - skmdb

  skmdb:
    image: mysql
    restart: always
    networks:
      - skm
    environment:
      MYSQL_DATABASE: 'skm_db'
      MYSQL_USER: 'skm_user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - '3307:3306'
    expose:
      - '3307'
    volumes:
      - skm-db:/var/lib/mysql

networks:
  skm:
volumes:
  skm-db:


这是我的应用程序属性代码

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3307/skm_db?createDatabaseIfNotExist=true
spring.datasource.username=skm_user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true


SQL连接成功建立
x1c 0d1x的数据
MySQL连接成功建立并暴露端口3307。但是spring application并没有与mysql建立联系。有人能建议我如何在docker内部将mysql与spring Boot 连接起来吗

jfgube3f

jfgube3f1#

正如您在问题中提到的,您正在docker compose中定义名为“SPRING_DATASOURCE_URL”的环境变量。
您可以尝试在application.properties文件中更改这一行:spring.datasource.url=jdbc:mysql://localhost:3307/skm_db?createDatabaseIfNotExist=true
to:spring.datasource.url=${SPRING_DATASOURCE_URL}
如果这有帮助,请接受这个答案,并支持它,因为我想赢得声誉来评论一个问题,并从提出这个问题的用户那里获得帮助。
如果发生其他错误,请通知我

6qqygrtg

6qqygrtg2#

因为我正在环境变量中设置JDBC URL,所以不得不将application.properties更改为
spring.datasource.url=${SPRING_DATASOURCE_URL}
我还需要将JDBC url中的端口从3307更改为3306(jdbc:mysql://localhost:3306/skm_db?createDatabaseIfNotExist=true)

相关问题