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

单个Spring配置文件的多个属性文件

臧弘和
2023-03-14

我们使用的是Spring boot2.0.0。我们有三个环境dev登台生产。我们当前的配置结构

开发

application-dev.yml
application-dev.properties

同样,对于每个环境,我们都有一个yml和属性文件。经过一年的开发,现在配置文件的单个yml文件变成了一个大型单片配置文件。

对于下面这样的配置文件,可以有多个配置文件吗?

application-dev.yml
application-dev-sqs.yml
application-dev-redis.yml

共有3个答案

程禄
2023-03-14

是的,这是可能的。spring.config.location用于外部化Spring Boot应用程序中的配置文件位置。这可用于提供文件在文件系统甚至类路径中的位置。根据您希望如何提供应用程序对文件的访问,您可以选择URI。

以编程方式执行:

@SpringBootApplication
public class Application {

  public static void main(String[] args) {

    ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(Application.class)
        .properties("spring.config.location:classpath:/application-dev.yml,classpath:/application-dev-sqs.yml,classpath:/application-dev-redis.yml")
        .build()
        .run(args);
    }
}

通过环境变量:

set SPRING_CONFIG_LOCATION=classpath:/application-dev.yml, \
  classpath:/application-dev-sqs.yml, \
  classpath:/application-dev-redis.yml 

因此,您可以将文件提供为逗号分隔的值。

我在这里使用了classpath,它也可以是文件系统中的一个位置:

/home/springboot-app/properties/application-dev.yml,/home/springboot-app/properties/application-sqs.yml,/home/springboot-app/properties/application-redis.yml
施彬彬
2023-03-14

我正在处理一个类似的问题,我建议使用yaml配置。

让我们描述一下。属性文件:

人们可以这样使用它:

@Component
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:application-${spring.profiles.active}.properties")
})
public class AppProperties {
}

这很容易配置。限制是,您不能组合配置文件。我的意思是,当您想将配置文件用作dev时,local其中local只是更改了dev配置文件的一些配置属性,Spring将尝试加载appation-dev,local.properties文件,这很可能不是您想要的。

顺便说一句,这就是Spring将自动为您做的事情,这对于您描述的主题很有用。

没有办法按配置文件配置它(而不是整个列表)。另一种可能性是,可以在spring中指定列表。配置。名称目前不是这样。

简而言之,使用:

@Profile("dev")
@Configuration
@PropertySources({
        @PropertySource("classpath:topic1-dev.properties"),
        @PropertySource("classpath:topic2-dev.properties")
})
public class AppPropertiesDev {
}

缺点是,您必须有几个这样的配置类(dev、staging),但知道您有主题。您还可以使用多重配置文件,这些配置文件(在我的测试中)按照您指定的顺序加载。这样,您的开发人员可以轻松地使用开发配置并更改他/她的测试所需的内容。

您可以看到我之前问过的关于yaml的方法-属性解析为多个Spring配置文件(yaml配置),好处是文件量较小-yaml在一个文件中包含所有配置文件,这可能是也可能不是您想要的。

邵兴文
2023-03-14

我认为有两种方法可以达到这个要求。

spring.profiles.active接受以逗号分隔的活动配置文件列表,因此您始终可以提供dev, dev-sqs, dev-redis作为值。

另一种方法是利用PropertySource和定制的PropertySourceFactory来实现这一需求。您可以找到一个从spring获取值的实现。配置文件。active,在下面的文章中加载一个相应的YAML文件。通过在YAML文件的名称中查找概要文件id,可以非常容易地调整实现以加载多个文件。

[如何]使用@Property tySource读取基于配置文件的YAML配置

 类似资料:
  • 寻找在Springboot应用程序中配置多个配置文件特定属性文件的最佳方法。下面是一个例子: -资源  · --application.properties  · · · · · --德夫             --application-dev.properties             --ldap-dev.properties             --Quartz-Dev.Prope

  • 我有一个包含application.yml的spring boot应用程序。 application.yml内容: 应用程序的内容-private.yml: 根据我的理解,integrations:ecom:api-url是从application-private.yml加载的,即使默认概要文件也有相同的属性。 如果两个配置文件处于活动状态,是否将按照指定配置文件的顺序加载和使用属性? 我的订单:

  • 1-我有一个带有Spring Boot的API,我需要配置两个DBMS(MySQL和Postgres)。 2-对于每个DBMS,我需要配置不同的配置文件。(Dev,Prod) 遵循我的MySQL配置类: 我以为我的出口是: 重要: 当我将配置文件配置为连接到我的MySQL Dev数据库时,我只想连接到它。我想要同样的结果,当它是MySQL的Prod的基础时。 当我将配置文件配置为连接到我的Post

  • 我是Elasticsearch用户,我必须使用log4j2.properties文件。不幸的是,我不能让它像我想要的那样删除日志。 null 我尝试使用路径条件“ifany”,在这篇log4j2文档中进行了描述:https://logging.apache.org/log4j/2.x/manual/appenders.html 下面是我的log4j2.properties文件: 当前,当我重新启动

  • 我们正在开发Spring Boot2.1.6,我们需要在应用程序中实现Spring Boot profile 我们的项目中目前有两个属性文件application.properties和bucket.properties(s3配置)文件。 上面的配置工作正常,spring boot能够正确地拾取文件。 但是我想在资源文件夹中创建以下类型的文件夹结构来正确地隔离文件。 一旦这样做,我就在上面的Pro

  • 我试图实现的是在application.yml文件上指定一个目录,该目录直接位于类路径上(在/resources下)。我希望能有这样的东西: 使用这种方法,IDE将始终默认为application-dev.yml。当我通过gradle构建应用程序,并在传递命令行参数的同时运行它时,我可以指定配置文件,从而加载适当的文件。理想情况下,能够做到这一点: java-jar-dspring.profile