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

Spring Boot配置文件不选择属性文件

秦弘亮
2023-03-14

我们正在开发Spring Boot2.1.6,我们需要在应用程序中实现Spring Boot profile

我们的项目中目前有两个属性文件application.properties和bucket.properties(s3配置)文件。

<bean id="applicationProperties"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="locations" >
            <list>
                <value>classpath:application-${spring.profiles.active:dev}.properties</value>
                <value>classpath:bucket-${spring.profiles.active:dev}.properties</value>
            </list>
        </property>
</bean>

上面的配置工作正常,spring boot能够正确地拾取文件。

但是我想在资源文件夹中创建以下类型的文件夹结构来正确地隔离文件。

|
resources
        |dev
            |
            application-dev.properties  
            bucket-dev.properties

一旦这样做,我就在上面的PropertyPlaceholderConfigurer中做了如下所示的更改。

<bean id="applicationProperties"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="locations" >
            <list>
                <value>classpath:${spring.profiles.active}/application-${spring.profiles.active:dev}.properties</value>
                <value>classpath:${spring.profiles.active}/bucket-${spring.profiles.active:dev}.properties</value>
            </list>
        </property>
</bean>

共有1个答案

咸晨
2023-03-14

Springboot不会开箱即用,但您可以使用PropertySourcesPlaceHolderConfigurer来完成此操作。

@Configuration
public class PropertyFileLoaderConfig {

    private static final Logger LOG = LoggerFactory.getLogger(PropertyFileLoaderConfig.class);

    private static final String PROFILE_DEV = "dev";
    private static final String PROFILE_STAGE = "stage";
    private static final String PROFILE_PROD = "prod";

    private static final String PATH_TEMPLATE = "classpath*:%s/*.properties";

    @Bean
    @Profile(PROFILE_DEV)
    public static PropertySourcesPlaceholderConfigurer devPropertyPlaceholderConfigurer() throws IOException {
        LOG.info("Initializing {} properties.", PROFILE_DEV);
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new PathMatchingResourcePatternResolver().getResources(getResourcesFromPath(PROFILE_DEV)));//Loads all properties files from the path
        configurer.setIgnoreUnresolvablePlaceholders(true);

        return configurer;
    }

    @Bean
    @Profile(PROFILE_STAGE)
    public static PropertySourcesPlaceholderConfigurer stagePropertyPlaceholderConfigurer() throws IOException {
        LOG.info("Initializing {} properties.", PROFILE_STAGE);
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new PathMatchingResourcePatternResolver().getResources(getResourcesFromPath(PROFILE_STAGE)));

        return configurer;
    }

    @Bean
    @Profile(PROFILE_PROD )
    public static PropertySourcesPlaceholderConfigurer prodPropertyPlaceholderConfigurer() throws IOException {
        LOG.info("Initializing {} properties.", PROFILE_PROD );
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new PathMatchingResourcePatternResolver().getResources(getResourcesFromPath(PROFILE_PROD )));

        return configurer;
    }

    private static String getResourcesFromPath(String path) {
        return PATH_TEMPLATE.replaceFirst("%s", path);
    }
}
 类似资料:
  • 寻找在Springboot应用程序中配置多个配置文件特定属性文件的最佳方法。下面是一个例子: -资源  · --application.properties  · · · · · --德夫             --application-dev.properties             --ldap-dev.properties             --Quartz-Dev.Prope

  • 问题内容: 我正在使用不同的Maven配置文件将我的应用程序部署到不同的环境。(使用weblogic-maven-plugin,但是我认为这并不重要) 在应用程序中,我使用Spring Web Services。现在,我想根据环境更改端点。(端点在Spring的applicationContext.xml中定义) 我的想法是从属性文件中读取值。该属性文件将在Mavens软件包阶段写入(或复制)。

  • 问题内容: 是否有任何理由在属性文件上使用XML进行Log4J配置? 问题答案: 在此博客中,对这两种方法的优点进行了有趣的讨论。以下部分是该博客的引文: 可以通过属性文件或XML文件定义属性。Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件。 两者都必须放在src文件夹中 。 该属性文件比XML文件更详细。XML还要求将log4j.dtd放置在源文件

  • 问题内容: 开始进行log4j配置的最简单方法是什么? 问题答案: 将名为的文件放在类路径的根目录中: 不需要什么了。Log4j将发现它并进行自我配置。

  • 你好,我在我的项目中使用Spring Boot和Hikari进行db连接。spinger引导版本是2.2.5.RELEASE,Hikari是3.4.2。但是,当我运行我的项目时,它总是使用Hikari默认配置值,而不是使用我的属性文件中的值。这是我的属性: 这是我在应用程序配置中的数据源: 下面是输出:10:23:19.050[main]DEBUG com . zax xer . hikari .

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