Spring boot 无法读取 docker-compose 环境变量

问题描述 投票:0回答:1

我这里遇到了一个“无聊”的问题。让我解释一下...

我正在尝试从我的 docker-compose 中的 Application.properties 中读取一些“环境变量”。

尽管我在容器中正确创建了 env 变量(我可以看到,当我检查容器时),但它们并没有从 Spring Boot 应用程序中读取。

这些“docker-compose 环境变量”似乎“不可访问”。

我正在做一个测试();所以,我试图在我的 Spring 应用程序中获取一个环境变量,它导致“null”,例如:

@Slf4j
@SpringBootApplication(exclude = R2dbcAutoConfiguration.class)
public class AppDriver {
    public static void main(String[] args) {
        
        System.out.println(  "container variables >>>>> " + System.getenv("MASTER_URL")   );

        SpringApplication.run(AppDriver.class,args);
    }

日志是:

容器变量>>>>> null

下面,它们是我的 docker-compose(我的 docker-compose[目前] 中没有任何 Spring boot 服务):

version: "3.5"

services:

  tenant1:
    image: postgres
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: tenant1
      POSTGRES_USER: user
    volumes:
      - ./data/tenant1:/var/lib/postgresql

  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MASTER_URL: r2dbc:mysql://user:password@localhost/master
      MYSQL_ROOT_PASSWORD: mysecret
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: master

我的应用程序属性:

logging.level.com.example=DEBUG
logging.level.io.r2dbc=DEBUG

master.url = ${MASTER_URL}

最后是我的 Java 文件:

@Configuration
//@ConfigurationProperties(prefix = "master")
@EnableR2dbcRepositories(entityOperationsRef = "masterEntityTemplate")
public class MasterConfig {

    @Value("${master.url}")
    private String url;

    @Bean
    @Qualifier(value = "masterConnectionFactory")
    public ConnectionFactory masterConnectionFactory() {

        System.out.println(">>>>>>>>>>>" + url);

        return ConnectionFactories.get(url);
        //.get("r2dbc:mysql://user:password@localhost/master");
    }

这是我犯的最后一个错误:

原因:java.lang.IllegalArgumentException:无法解析值“${MASTER_URL}”中的占位符“MASTER_URL”

有人知道如何解决这个问题吗?

非常感谢

spring-boot docker-compose environment-variables application.properties
1个回答
0
投票

在撰写文件中传递环境变量的语法是 varibaleName=value 将冒号 (:) 替换为等号 (=)

替换:

MASTER_URL:r2dbc:mysql://用户:密码@localhost/master

这样:

  • MASTER_URL=r2dbc:mysql://用户:密码@localhost/master
© www.soinside.com 2019 - 2024. All rights reserved.