Spring Data Jpa 如何使用环境变量与application.properties在Spring Boot ?

xdnvmnnf  于 2022-11-23  发布在  Spring
关注(0)|答案(2)|浏览(147)

我试着配置我的application.properties从我设置的系统变量中获取值。问题是无论我怎么做它都不起作用。我试着使用this example中的DataSource的自定义类配置,但仍然没有成功。我在stackoverflow上只能找到指向官方文档的链接。不幸的是,这是一个死胡同,因为它不包含“我什么都没说,也没有我想要实现的例子。我还找到了像spring.datasource.url = ${SPRING_DATASOURCE_URL}这样的例子,每个人都说spring知道如何自动获取环境变量。好吧,令人惊讶的是,它没有。
我还发现了像spring.datasource.password = ${SPRING_DATASOURCE_PASSWORD:the_actual_password)spring.datasource.url = #{SPRING_DATASOURCE_URL:#{'the_actual_url'}}这样的例子,这完全不是我所需要的,如果你问我的话,这是非常无用的。我的意思是,我可以通过编写spring.datasource.password = the_actual_password来实现同样的事情。关键是隐藏敏感数据。
现在,我会留下两张截图,我之所以要做到这一点,是因为当我推到GitHub时,我不必担心我的证书或任何东西会被公开给每个人看。
下面是我的环境变量的外观:

以下是www.example.com的application.properties外观:

提前谢谢你!如果你对我的问题有答案的话,你能让我知道除了application.jwt属性之外,我如何用环境变量实现同样的事情吗?

zf2sa74q

zf2sa74q1#

好吧,我想这个解决方案是相当...愚蠢的,但它在这里。它不起作用的原因是因为环境变量是在IntelliJ第一次打开后定义的,如here所述。现在看起来一切都很好。
我设法实现了我想要的功能。
换句话说就是:

spring.datasource.url = ${SPRING_DATASOURCE_URL}
spring.datasource.username = ${SPRING_DATASOURCE_USERNAME}
spring.datasource.password = ${SPRING_DATASOURCE_PASSWORD}
spring.datasource.driver-class-name = ${SPRING_DATASOURCE_DRIVERCLASSNAME}

现在运行得很好。
谢谢你的帮助!

xxls0lw8

xxls0lw82#

是否使用了正确的注解?
给定如下属性:

root.test = ${TEST.VAR:-Test}

环境变量,如:

TEST.VAR = Something

配置类:

@Configuration
@ConfigurationProperties(prefix = "root")
public class Test {
  private String test;

  public String getTest() {
    return test;
  }

  public void setTest(String test) {
    this.test = test;
  }

}

可以通过在主类上设置@ConfigurationPropertiesScan来使用Records

@SpringBootApplication
@ConfigurationPropertiesScan
public class DemoApplication{...}

定义记录如下:

@ConfigurationProperties(prefix = "root")
public record Test (String test) {
}

相关问题