Загрузка свойств, размещенных в разных папках внутри ресурсов, в Java - PullRequest
0 голосов
/ 09 января 2020

У меня есть несколько файлов свойств, помещенных в папку ресурсов.

src/main/java
src/main/resources-
                  prod
                     -> application.properties
                  prod-brand-1
                     -> application.properties
                  prod-brand-2
                     -> application.properties
                  application-default.properties (directly placed under resources folder)

В одном из моих классов Java я инициализирую компонент среды, который будет загружать файлы свойств с помощью аннотации @PropertySource.

@Configuration
@PropertySource({"classpath:application-default.properties",
"classpath:prod/application.properties",
"classpath:prod-brand-1/application.properties",
"classpath:prod-brand-2/application.properties"
})
public class PropertyConfig{
//
}

Я могу загрузить application-default.properties , поскольку он находится непосредственно в папке ресурсов, но не в тех, которые находятся в некоторых каталогах, таких как prod, prod- 1, prod-2 .

В реальном сценарии нижеследующее должно быть заменено некоторым заполнителем, а значения (prod, prod-brand-1, prod-brand-2) которых должны быть вводится через переменные окружения.

@PropertySource({"classpath:prod/application.properties" "classpath:prod-brand-1/application.properties" "classpath:prod-brand-2/application.properties"})

Должно быть что-то вроде этого: -

@PropertySource({"classpath:{dir}/application.properties"})

Пожалуйста, предложите, как я могу использовать заполнитель с @ PropertySource.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Вы можете объявить ваши источники собственности в том же пакете, что и ваш PropertyConfig.class файл. Скажите `src / main / java / com / mypackage / me / prod-brand-2 / application.properties.

Затем объявите источник вашей собственности следующим образом:

package com.mypackage.me.prod-brand-2;

@Configuration
@PropertySource("classpath:/com/mypackage/me/prod-brand-2/application.properties")
public class PropertyConfig{
//
}`

или используйте новая @PropertySources (не путать с @PropertySource) аннотация:

0 голосов
/ 09 января 2020

Вы можете попробовать это так для файлов в одном месте (папки ресурсов)

@PropertySources({
    @PropertySource("classpath:foo.properties"),
    @PropertySource("classpath:bar.properties")
})
public class PropertiesWithJavaConfig {
    //...
}

Для нескольких мест, как вы сказали, вы можете попробовать эти коды

  @Configuration
    public class PropertiesConfiguration {
         @Bean
        public PropertyPlaceholderConfigurer properties() {
            final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    //        ppc.setIgnoreUnresolvablePlaceholders(true);
            ppc.setIgnoreResourceNotFound(true);

            final List<Resource> resourceLst = new ArrayList<Resource>();

            resourceLst.add(new ClassPathResource("myapp_base.properties"));
            resourceLst.add(new FileSystemResource("/etc/myapp/overriding.propertie"));
            resourceLst.add(new ClassPathResource("myapp_test.properties"));
            resourceLst.add(new ClassPathResource("myapp_developer_overrides.properties")); // for Developer debugging.

            ppc.setLocations(resourceLst.toArray(new Resource[]{}));

            return ppc;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...