Java 连接串中的弹簧外形

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

我正在与Spring BootDocker合作。我正在使用一个
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中运行时,环境变量将覆盖它。