首页 > 解决方案 > 连接字符串中的 Spring Profiles

问题描述

我正在使用Spring BootDocker。我正在使用connectionService.java它返回连接来执行某些任务。此连接字符串具有jdbc:mysql://localhost/databaseName?autoReconnect=true&useSSL=false. 如果我正在运行应用程序,则它运行良好,但如果我构建 docker 映像,则此连接字符串应替换为jdbc:mysql://docker-mysql/databaseName?autoReconnect=true&useSSL=false. 因为 docker-image 的配置是docker-mysql而不是localhost

连接服务.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;
    }
}

码头工人组成

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

错误:此刻。我正面临错误Communication Link failure。我怎么能做到这一点,相同的代码适用于运行应用程序以及构建 docker 映像时。

标签: javaspring-bootdockerspring-mvc

解决方案


您在 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");

推荐阅读