当前位置: 首页 > 面试题库 >

Spring Boot外部化属性不起作用

顾乐家
2023-03-14
问题内容

我在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.properties 2) application-dev.properties

application.properties中有一个条目

spring.profiles.active=dev

我看到正确的log.level被输入到我的代码中,这意味着该命令正在运行。只是我不知道为什么我的超控未按预期发生

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


问题答案:

我不使用此方法来外部化属性。首先,我将为您的方法提出建议,然后再向您展示我在使用什么。

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

我已经为您创建了一个示例项目,可在此处获得相关说明。

现在,我使用的方法

我为每个配置文件定义一个配置文件,并将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();
}
}

我还获得了一个对所有配置文件均有效的配置文件,我将其称为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属性。

我正在完成有关如何使用Security,Email,Data JPA,Amazon Web Services,Stripe等创建Spring
Boot网站的课程。如果您愿意,可以在这里注册您的兴趣,当课程开放供您注册时,您会收到通知。



 类似资料:
  • 我已经查看了下面的线程,并遵循了其中给出的内容。仍然没有发生我的属性重写 Spring Boot-外部化属性 配置文件特定属性启用 Spring Boot外部配置 我在Tomcat 8.0.33和Spring boot starter web上,并在我的setenv中得到了这个。上海 在overrides文件夹中我得到了2个文件 1) <代码>应用程序。属性2)

  • 我知道有很多关于这个的线程,但还没有一个解决我的问题。我有一个在Eclipse中运行的Spring Boot应用程序,我将参数外部化,以便部署到外部Tomcat并使属性远离战争。我将application.properties从src/main/Resources移至APP_ROOT/config。在catalina.sh,我添加了这个: 外部构建工作正常;然而,现在它不再从日食开始。我通过在启动

  • 我正在使用MongoDB的springboot 2.3.0。注释对我不起作用。如果发生异常,则无法回滚事务。 任何帮助都将得到高度赞赏。 我的控制器类: 我的serviceImpl类 我的MongoConfig类

  • 我在一个android应用程序中工作,正在使用一个DialogFragment来显示一个对话框,我想让那个DialogFragment不可取消。我已经将对话框可取消属性设置为false,但它仍然不受影响。 请查看我的代码,并建议我一个解决方案。

  • 在springboot应用程序中,我有一个jar,然后是一个子目录config with application。属性,applicationContext。xml和log4j。。。属性文件。 我正在尝试外部化log4j配置。application.properties是这样外部化的。 但是,当springboot运行时,它使用jar文件中的log4j配置文件。通过使用-Dlog4j.debug选

  • 我根据参考指南 http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-application-property-files 设置了一个 Spring Boot 1.3.0 应用程序。在OS X上一切正常,文件从当前目录加载。表达式已正确解