Java 连接串中的弹簧外形
我正在与Spring Boot和Docker合作。我正在使用一个Java 连接串中的弹簧外形,java,spring-boot,docker,spring-mvc,Java,Spring Boot,Docker,Spring Mvc,我正在与Spring Boot和Docker合作。我正在使用一个connectionService.java,它返回连接来执行一些任务。此连接字符串具有jdbc:mysql://localhost/databaseName?autoReconnect=true&useSSL=false。如果我正在运行应用程序,那么它运行得很好,但是如果我构建docker映像,那么这个连接字符串应该替换为jdbc:mysql://docker-mysql/databaseName?autoReconnect=tr
connectionService.java
,它返回连接来执行一些任务。此连接字符串具有jdbc:mysql://localhost/databaseName?autoReconnect=true&useSSL=false
。如果我正在运行应用程序,那么它运行得很好,但是如果我构建docker映像,那么这个连接字符串应该替换为jdbc:mysql://docker-mysql/databaseName?autoReconnect=true&useSSL=false
。因为docker映像的配置为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映像时使用
您可以在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");
更新了我的asnwer。这将适用于docker映像,但我如何使用相同的代码来“运行应用程序”呢?您可以在application.yml/properties中进行设置,这样,当您在本地计算机中运行时,该值将从配置文件中读取,当您在docker中运行时,环境变量将覆盖它。