我的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 连接起来吗
2条答案
按热度按时间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}
如果这有帮助,请接受这个答案,并支持它,因为我想赢得声誉来评论一个问题,并从提出这个问题的用户那里获得帮助。
如果发生其他错误,请通知我
6qqygrtg2#
因为我正在环境变量中设置JDBC URL,所以不得不将application.properties更改为
spring.datasource.url=${SPRING_DATASOURCE_URL}
我还需要将JDBC url中的端口从3307更改为3306(jdbc:mysql://localhost:3306/skm_db?createDatabaseIfNotExist=true)