gpt4 book ai didi

java - Spring Boot 外部化属性不起作用

转载 作者:行者123 更新时间:2023-11-28 22:37:04 27 4
gpt4 key购买 nike

我查看了以下线程并遵循了那里给出的内容。我的属性覆盖仍然没有发生

  1. > Spring Boot - Externalized properties
  2. > Profile Specific Property Enablement
  3. > Spring Boot External Config

我在 Tomcat 8.0.33 和 Spring boot starter web 上,在我的 setenv.sh 中得到了这个

export JAVA_OPTS="$JAVA_OPTS -Dlog.level=INFO -Dspring.config.location=file:/opt/jboss/apache-tomcat-8.0.33/overrides/ -Dspring.profiles.active=dev"

在覆盖文件夹中我得到了 2 个文件

1) application.properties2) application-dev.properties

application.properties 中只有一个条目

spring.profiles.active=dev

我看到正确的 log.level 被馈送到我的代码中,这意味着该命令正在运行。只是我不知道为什么我的覆盖没有按预期发生

我的工作区中没有任何 `PropertyPlaceholderConfigurer 代码。我什至不确定我是否需要 1

最佳答案

我不使用此方法来外部化属性。首先,我会尝试对您的方法提出建议,然后我会向您展示我正在使用的方法。

对于您的方法的建议是使用 file:///而不是 file:/与 Spring 一样,我发现当不在冒号后传递三个斜杠时,它无法识别该属性。

我已经为您创建了一个示例项目,available here with instructions .

现在介绍我使用的方法。

我为每个配置文件定义一个配置文件,并将 application.properties 文件保存在 src/main/resources 下。

然后我在每个配置文件上使用@Profile 和@PropertySource 注释。

例如:

@Configuration
@Profile("dev")
@PropertySource("file:///${user.home}/.devopsbuddy/application-dev.properties")
public class DevelopmentConfig {

@Bean
public EmailService emailService() {
return new MockEmailService();
}

@Bean
public ServletRegistrationBean h2ConsoleServletRegistration() {
ServletRegistrationBean bean = new ServletRegistrationBean(new WebServlet());
bean.addUrlMappings("/console/*");
return bean;
}
}

@Configuration
@Profile("prod")
@PropertySource("file:///${user.home}/.devopsbuddy/application-prod.properties")
public class ProductionConfig {

@Bean
public EmailService emailService() {
return new SmtpEmailService();
}
}

我还有一个对所有配置文件都有效的Configuration文件,我称之为ApplicationConfig,如下:

@Configuration
@EnableJpaRepositories(basePackages = "com.devopsbuddy.backend.persistence.repositories")
@EntityScan(basePackages = "com.devopsbuddy.backend.persistence.domain.backend")
@EnableTransactionManagement
@PropertySource("file:///${user.home}/.devopsbuddy/application-common.properties")
public class ApplicationConfig {
}

我的 src/main/resources/application.properties 文件如下所示:

spring.profiles.active=dev
default.to.address=me@example.com
token.expiration.length.minutes=120

当然,我可以通过将 spring.profile.active 属性作为系统属性传递来将其外部化,但对于我的情况和现在来说没问题。

运行应用程序时,如果我传递“dev”配置文件,Spring 将加载 DevelopmentConfig 类中定义的所有属性和 Bean 以及 ApplicationConfig 中的所有属性和 Bean。如果我传递“prod”,ProductionConfig 和 ApplicationConfig 属性将被加载。

我正在完成有关如何使用安全、电子邮件、Data JPA、Amazon Web Services、Stripe 等创建 Spring Boot 网站的类(class)。如果您愿意,可以注册您的兴趣here当类(class)开放注册时,您会收到通知。

关于java - Spring Boot 外部化属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36635163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com