Как загрузить все файлы .yml из каталога ресурсов во время весеннего запуска приложения? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть 2-3 .yml файла в каталоге ресурсов в весеннем приложении.Я хочу автоматически загрузить все эти файлы при запуске приложения.

Я пробовал приведенный ниже код, но он не работал.

ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(YamlLoadApplication.class)
                .properties("spring.config.name:applicationTest,CountriesData",
                        "spring.config.location:src/main/resources/")
                .build().run(args);

        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        MutablePropertySources sources = environment.getPropertySources();

Пожалуйста, помогите мне решить эту проблему.Каков наилучший способ достичь этого?Я бы использовал все эти значения файлов yml во всем приложении.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

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

Spring рекомендует использовать Environment для получения значений свойств.

env.getProperty("mongodb.db");

Вы можете упомянуть файлы свойств, которые используются в классе.

@Configuration
    @PropertySource({
        "classpath:config.properties",
        "classpath:db.properties"
    })
    public class AppConfig {
        @Autowired
        Environment env;
    }

В Spring 4 вы можете игнорироватьResourceNotFound, чтобы игнорировать файл не найденных свойств

  @PropertySources({
        @PropertySource(value = "classpath:missing.properties", ignoreResourceNotFound=true),
        @PropertySource("classpath:config.properties")

Примеры приведены в статье - https://www.mkyong.com/spring/spring-propertysources-example/

Если вам нужна дополнительная информация, обратитесь к статье Из весенней документации

0 голосов
/ 18 сентября 2018

Одна проблема здесь "spring.config.location:src/main/resources/" устанавливает spring.config.location на src/main/resources/, который является не ресурсом пути к классам, а ресурсом файловой системы. Это выглядит из текущего каталога, из которого вы запускаете приложение Spring Boot.

Несколько исправлений:

Укажите полный путь к файловой системе, например:

public static void main(String[] args) {
    ConfigurableApplicationContext applicationContext;
    applicationContext = new SpringApplicationBuilder(YmlsApplication.class)
        .properties("spring.config.name:applicationTest,CountriesData",
            "spring.config.location:/Users/msimons/tmp/configs/")
        .build().run(args);

    ConfigurableEnvironment environment = applicationContext.getEnvironment();
    MutablePropertySources sources = environment.getPropertySources();
    sources.forEach(p -> System.out.println(p.getName()));
}

Или укажите ресурс classpath. Обратите внимание, что я поместил файлы конфигурации в отдельный каталог, который находится в src/main/resources/custom-config:

public static void main(String[] args) {
    ConfigurableApplicationContext applicationContext;
    applicationContext = new SpringApplicationBuilder(YmlsApplication.class)
        .properties("spring.config.name:applicationTest,CountriesData",
            "spring.config.location:classpath:/custom-config/")
        .build().run(args);

    ConfigurableEnvironment environment = applicationContext.getEnvironment();
    MutablePropertySources sources = environment.getPropertySources();
    sources.forEach(p -> System.out.println(p.getName()));
}

Обратите внимание на classpath: внутри пути, а также на запуск каталога на корневом уровне ресурсов с /.

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