连接字符串中的 Spring Profiles
Posted
技术标签:
【中文标题】连接字符串中的 Spring Profiles【英文标题】:Spring Profiles in connection String 【发布时间】:2020-03-30 07:53:17 【问题描述】:我正在使用 Spring Boot 和 Docker。我正在使用 connectionService.java
返回 connection 来执行某些任务。这个连接字符串有jdbc:mysql://localhost/databaseName?autoReconnect=true&useSSL=false
。如果我正在运行应用程序,则它运行良好,但如果我构建 docker 映像,则此连接字符串应替换为 jdbc:mysql://docker-mysql/databaseName?autoReconnect=true&useSSL=false
。因为 docker-image 的配置是 docker-mysql 而不是 localhost 。
ConnectionService.java
@Service
public class ConnectionService
public Connection createConnection() throws SQLException
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/databaseName?autoReconnect=true&useSSL=false", "root", "root");
return connection;
Docker-compose
version: '3'
services:
docker-mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=databaseName
- MYSQL_USER=root
- MYSQL_PASSWORD=root
ports:
- 3307:3306
app:
image: app:latest
ports:
- 8080:8080
depends_on:
- docker-mysql
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://docker-mysql/databaseName?autoReconnect=true&useSSL=false
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=root
错误:马上。我遇到了错误通信链接故障。 我怎么能做到这一点,相同的代码适用于运行应用程序以及构建 docker 映像时。
【问题讨论】:
【参考方案1】:您在 Docker-compose 中设置了 SPRING_DATASOURCE_URL 环境变量,但不要在您的 ConnectionService 中使用它。
也许,您可以使用 Spring 中的 System.getEnv() 或 @Value 注解。
修改你的 ConnectionService 类:
@Value("$spring.datasource.url")
private String datasourceUrl;
Connection connection = DriverManager.getConnection(datasourceUrl, "root", "root");
【讨论】:
更新了我的答案。 这适用于 docker-image 但我如何也可以将相同的代码用于“运行应用程序”? 你可以在你的 application.yml/properties 中设置它所以,当你在本地机器上运行时,该值将从你的配置文件中读取,当你在 docker 中运行时,环境变量会覆盖它.以上是关于连接字符串中的 Spring Profiles的主要内容,如果未能解决你的问题,请参考以下文章
为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul
spring.profiles.include 跟 spring.profiles.active 的区别