Прочитайте файл нескольких свойств с помощью профилей spring в Spring Boot

#java #spring #spring-boot #spring-profiles

Вопрос:

Я пытаюсь загрузить файл свойств 2 в весеннюю загрузку. Один из них содержит метаданные (подключение к базе данных и другие подобные свойства). Другой содержит бизнес-логику (сопоставление между вышестоящей и нижестоящей сущностью. Это сопоставление отличается в Dev и Prod, поэтому для них не может быть одного файла ресурсов).

Я хочу использовать профили Spring для различных сред (Dev, Stage, Prod). Итак, я создал 3 разные папки по src/main/resources 1 для каждой среды. Используя spring profies, я знаю, как создать файл env для конкретного приложения-env.properties. Однако я не могу продвинуться в том, как использовать то же самое для моего варианта использования.

PS : Не добавляю никакого фрагмента кода, потому что вопрос этого не требует.

Ответ №1:

Вот пример из документов:

 $ java -jar myproject.jar --spring.config.location=
    optional:classpath:/default.properties,
    optional:classpath:/override.properties
 

Вы также можете определить это в своем коде перед запуском Spring Boot:

 public static void main(String[] args) {
    System.setProperty("spring.config.location", "optional:classpath:/default.properties,optional:classpath:/override.properties");
    SpringApplication.run(Application.class, args);
}
 

Чтобы использовать пользовательские префиксы для конкретных свойств вашего приложения, вы можете определить @ConfigurationProperties класс(классы):

 @Data
@ConfigurationProperties(prefix = "app.mapper")
public class MapperProperties {

    private String foo;
}
 

и используйте его в любом компоненте:

 @Component
@RequiredArgsConstructor
@EnableConfigurationProperties
public class YourComponent {
    
    private final MapperProperties properties;
}
 

Комментарии:

1. Вместо использования «spring.config.location» и передачи нескольких файлов свойств, могу ли я использовать пользовательские ключи свойств для каждого ресурса? Пример : app.mapper = «dev/mapper.properties», app.config=»dev/application.properties»? Я спрашиваю об этом, потому что сопоставитель анализируется и загружается в объект свойств.

2. Я не уверен, чего вы пытаетесь достичь… все ключи из всех местоположений объединяются вместе, образуя единую конфигурацию.