当前位置: 首页 > 知识库问答 >
问题:

Spring Boot外部化属性不工作

贺光华
2023-03-14

我已经查看了下面的线程,并遵循了其中给出的内容。仍然没有发生我的属性重写

  1. Spring Boot-外部化属性
  2. 配置文件特定属性启用
  3. Spring Boot外部配置

我在Tomcat 8.0.33和Spring boot starter web上,并在我的setenv中得到了这个。上海

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

在overrides文件夹中我得到了2个文件

1) <代码>应用程序。属性2)application-dev.properties

应用程序。属性中只有一个条目

spring.profiles.active=dev

我看到正确的log.level被输入到我的代码中,这意味着这个命令正在工作。只是我不知道为什么我的覆盖没有按预期发生

我的工作区中没有任何“属性空间持有人配置代码”。我甚至不确定我是否需要1


共有1个答案

巫培
2023-03-14

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

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

我已经为您创建了一个示例项目,这里提供了说明。

现在说说我使用的方法。

我为每个概要文件定义一个配置文件,并保留应用程序。src/main/resources下的属性文件。

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

例如:

@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。属性文件如下所示:

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

我当然可以把Spring具体化。轮廓通过将其作为系统属性传递来激活属性,但对于我的情况和目前来说,它是可以的。

在运行应用程序时,如果我传递了“dev”概要文件,Spring将加载DevelopmentConfig类中定义的所有属性和bean以及ApplicationConfig中的所有属性和bean。如果我传递“prod”,则将加载ProductionConfig和ApplicationConfig属性。

我正在完成一门关于如何使用安全、电子邮件、数据JPA、Amazon Web Services、Stripe等创建Spring Boot网站的课程。如果您愿意,您可以在此处注册您的兴趣,您将在课程开放注册时收到通知。

 类似资料:
  • 问题内容: 我在Tomcat 8.0.33和Spring Boot Starter Web上,并将其保存在我的setenv.sh中 在覆盖文件夹中,我有2个文件 1) 2) application.properties中有一个条目 我看到正确的log.level被输入到我的代码中,这意味着该命令正在运行。只是我不知道为什么我的超控未按预期发生 我的工作区中没有任何`PropertyPlacehol

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

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

  • 问题内容: 我想将一些hibernate配置放在属性文件中,以使其无需构建和部署就可编辑。 我尝试按照不带persistence.xml配置文件的Create JPAEntityManager中的说明解决问题 app.properties: persistence.xml 在初始化代码中,应用程序执行以下序列(查找属性), 但失败并显示错误消息: 有人知道我的配置可能出什么问题吗? 版本:JBos

  • 我希望在运行时传递变量,一旦war文件部署在tomcat上。如何使用classplath中的application.properties以及另一个属性文件ex。abcd.properties位于specific directory.am基本上希望设置额外的类路径,并从该路径中的属性文件中读取值,以及war部署的默认类路径位置。 我使用Spring boot。其中一种方法是将所有属性传递到数据库端,

  • 我有这样的配置,需要用于Spring Boot应用程序。 默认情况下,spring-boot会拾取位于src/main/resources/中的application.properties文件 我想改变这个路径并将Spring Boot到不同的application.properties文件 我可以使用 有没有任何替代的解决方案,我可以做到这一点,而不通过命令行传递参数? 在我的主要班级 在我尝试