Я использую @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")
который является локальной копией репозитория. Это работает, но это просто жестко запрограммированное решение.
Есть ли более чистое решение?
Вы можете загрузить свойства, используя аннотацию @ConfigurationProperties. Предположим, вы правильно настроили сервер конфигурации.
Пример предположим, что имя вашей службы — обслуживание клиентов, и вы хотите получить файлы свойств с сервера конфигурации.
Шаг 1: добавьте свойства клиента в репозиторий git. Вы также можете добавить определенные свойства среды, такие как
customer-qa.properties ,customer-dev.properties
Теперь, чтобы загрузить эти свойства
@Component
@ConfigurationProperties("customer-service")
@Data
public class CustomerServiceConfigurations {
private String somePropertyname;
}
Для получения более подробной информации см. приведенный ниже пример Сервер конфигурации.
Вы можете поместить общие общие свойства в application.properties. Взгляните на этот stackoverflow.com/a/55933568/320087
Это то, что я сделал. У меня есть в Git общие свойства для разных служб для конкретной среды (application-env.yml) и общие свойства для служб и среды (application.yml). Я просто говорил, что думал, что смогу сохранить в коде аннотацию PropertySource при использовании Spring Cloud Config. Но кажется, что это невозможно.
И последнее, как внедрить spring.profiles.include, но это уже другой вопрос stackoverflow.com/questions/56163411/…
Я хотел продолжать использовать аннотацию PropertySource и иметь отдельные файлы для отдельной группы свойств, например mongo-${env}.properties для свойств mongo и т. д. Решение, которое вы описали, сработало и для меня, даже без необходимости в аннотации ConfigurationProperties. Поскольку для этого конкретного примера конфигурация требуется нескольким микросервисам, я скопировал эти свойства в «общий» файл application-prod.yml в Git.