我正在使用Spring Boot,Spring Cloud Config和Docker开发一个Web应用程序。有3个项目。一种是springboot web,Spring Cloud Config Server和MySql数据库。我已经将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上使用了相同的datasouce(Spring Data JPA)配置。哪个工作正常。但这是我第一次使用SpringBoot Web。我是否需要在数据源上明确定义任何配置。
请帮助!
答案 0 :(得分:0)
数据源URL,即spring.datasource.url: jdbc:mysql://employee-
可能是错误的。
或应将您的数据源URL添加到您的 Application.properties 文件
URL的格式应为jdbc:oracle:thin:@hostname:portNumber/schemaName
有关更多详细信息和说明,Not using the hostname and port in jdbc url
答案 1 :(得分:0)
我执行以下任务来解决问题-
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安装并构建 SpringBoot Web图像。
5)如果我们放下容器,我们需要执行 同样的任务。因为每次Mysql 容器获取其他IP。