无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。原因:发
Posted
技术标签:
【中文标题】无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。原因:发【英文标题】:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Fa 【发布时间】:2019-10-30 15:09:19 【问题描述】:我正在使用 Spring Boot、Spring Cloud Config 和 Docker 开发 Web 应用程序。有3个项目。一种是springboot web、Spring Cloud Config Server和mysql Database。我已经将 Spring Boot Web 与 Themeleaf 一起使用。它基本上是执行 CRUD 操作。在开发阶段它工作正常。但是当我在 Docker 中部署它时 Spring-Boot webapp 容器(springboot-thymeleaf-web-crud)给了我以下错误--
应用程序启动失败
说明:
配置数据源失败:未指定“url”属性,无法配置嵌入式数据源。
原因:无法确定合适的驱动程序类
行动:
考虑以下几点: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径中。 如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有激活的配置文件)。
我在 Docker Compose 文件上创建了 3 个容器。
version: '3'
services:
springboot-thymeleaf-web-crud:
image: numery/springboot-thymeleaf-web-crud:latest
networks:
- employee-network
ports:
- 8080:8080
depends_on:
- employee-database
- spring-cloud-config-server-employee
spring-cloud-config-server-employee:
image: numery/spring-cloud-config-server-employee:latest
networks:
- employee-network
ports:
- 8888:8888
employee-database:
image: mysql:5
networks:
- employee-network
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=employee_directory
volumes:
- /home/numery/Docker-Database/employee_directory:/var/lib/mysql
networks:
employee-network:
SpringBoot Web Application.properties 如下所示
spring.application.name=employee-service-mysql
server.port=8080
spring.cloud.config.uri=http://spring-cloud-config-server-
employee:8888
spring.profiles.active=dev
SpringBoot Config Server 提供以下属性--
spring.datasource.url: jdbc:mysql://employee-
database:3306/employee_directory?
useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
spring.datasource.username: root
spring.datasource.password: rootpassword
spring.datasource.validationQuery: SELECT 1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.tomcat.max-wait: 20000
spring.tomcat.max-active: 50
spring.tomcat.max-idle: 20
spring.tomcat.min-idle: 15
spring.jpa.properties.hibernate.dialect:
org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql: true
spring.jpa.format-sql: true
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: create
在这 3 个容器中,Mysql 和 Spring Cloud Config 容器工作正常。但是对于 Spring Boot Webapp(springboot-thymeleaf-web-crud) 通过给出上述错误退出。
注意:我在其他一些 SpringBoot Rest API 上使用相同的数据源(Spring Data JPA)配置。哪些工作正常。但这是我第一次使用 SpringBoot Web。我是否需要在数据源上明确定义任何配置。
请帮忙!!
【问题讨论】:
【参考方案1】:我执行以下任务来解决问题--
1) 我们应该已经启动并运行了 mysql 容器。
2) 检查 ip 运行的 mysql 容器—— docker 检查 mysqlcontainer | grep IP
3) 将该 mysql 容器的 IP 添加到我的 springboot 网络应用——
"spring.datasource.url: jdbc:mysql://172.20.0.2:3306/employee_directory? useSSL=false&serverTimezone =UTC&useLegacyDatetimeCode=false"
4) 运行 mvn clean、mvn install 并构建 SpringBoot Web 图片。
5) 如果我们关闭容器,我们需要执行 再次执行相同的任务。因为每次Mysql 容器获取不同的ip。
【讨论】:
【参考方案2】:数据源 URL,即spring.datasource.url: jdbc:mysql://employee-
可能是错误的。
或者应该将您的数据源网址添加到您的 Application.properties 文件
网址格式应为jdbc:oracle:thin:@hostname:portNumber/schemaName
欲了解更多详情和说明,Not using the hostname and port in jdbc url
【讨论】:
我还有另一个 SpringBoot Rest Api。在 Docker 中运行。我正在使用以下 spring.datasource.url:jdbc:mysql://customer-database:3306/customerdatabase。为什么这工作正常?我在那个 api 上没有收到任何错误。 @Numery,上面你的代码中的datasource url,spring.datasource.url:jdbc:mysql://employee-你没有指定连接数据库的端口和主机名。这可能是错误的原因 - 无法配置数据源:未指定“url”属性并且无法配置嵌入式数据源。 @Perera,明确提及。 spring.datasource.url: jdbc:mysql://employee-database:3306/employee_directory? useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false @Numery,对不起,我没有看到 database:3306/employee_directory?代码中的 useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false 部分。我的错。 您是否尝试将 url 添加到您的 Application.properties 文件中? 我已将其添加到 appliaction.properties 文件中。但是出现以下错误--------2019-06-17 01:07:45.964 ERROR 24392 --- [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - 池初始化期间出现异常。 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。在 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.13.jar:8.0.13]以上是关于无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。原因:发的主要内容,如果未能解决你的问题,请参考以下文章
无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。原因:发
无法配置数据源:未指定“url”属性,无法配置嵌入式数据源。- java spring 项目