Использование @PropertySource с Spring Cloud Config — Git

Я использую @PropertySource для настройки класса конфигурации:

@Configuration
@PropertySource("classpath:/mongo-${env}.properties")
public class MongoConfiguration {

Файлы mongo-${env}.properties находятся в пути к классам. Это прекрасно работает.

Теперь я выношу конфигурацию в Git с помощью Spring Cloud Config: Все файлы application.yml были перенесены. Однако я не знаю, возможно ли это и как экстернализовать файлы свойств, подобные объявленным в @PropertySource.

Что я сделал: Я попытался переименовать mongo-prod.properties в application-prod.properties в Git. Затем я изменил @PropertySource на:

@PropertySource("file:///C://.../config-repo/application-prod.properties")

который является локальной копией репозитория. Это работает, но это просто жестко запрограммированное решение.

Есть ли более чистое решение?

3
0
2 229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Пример предположим, что имя вашей службы — обслуживание клиентов, и вы хотите получить файлы свойств с сервера конфигурации.

Шаг 1: добавьте свойства клиента в репозиторий git. Вы также можете добавить определенные свойства среды, такие как

customer-qa.properties ,customer-dev.properties

Теперь, чтобы загрузить эти свойства

@Component
@ConfigurationProperties("customer-service")
@Data
public class CustomerServiceConfigurations {

    private String somePropertyname;

} 

Для получения более подробной информации см. приведенный ниже пример Сервер конфигурации.

Я хотел продолжать использовать аннотацию PropertySource и иметь отдельные файлы для отдельной группы свойств, например mongo-${env}.properties для свойств mongo и т. д. Решение, которое вы описали, сработало и для меня, даже без необходимости в аннотации ConfigurationProperties. Поскольку для этого конкретного примера конфигурация требуется нескольким микросервисам, я скопировал эти свойства в «общий» файл application-prod.yml в Git.

Mykeul 21.05.2019 17:05

Вы можете поместить общие общие свойства в application.properties. Взгляните на этот stackoverflow.com/a/55933568/320087

Niraj Sonawane 22.05.2019 05:15

Это то, что я сделал. У меня есть в Git общие свойства для разных служб для конкретной среды (application-env.yml) и общие свойства для служб и среды (application.yml). Я просто говорил, что думал, что смогу сохранить в коде аннотацию PropertySource при использовании Spring Cloud Config. Но кажется, что это невозможно.

Mykeul 22.05.2019 09:39

И последнее, как внедрить spring.profiles.include, но это уже другой вопрос stackoverflow.com/questions/56163411/…

Mykeul 23.05.2019 09:10

Другие вопросы по теме