2016-04-02 7 views
0

Я хочу зарегистрировать специфические свойства bean-компонента при создании бина, если он не существует в приложении. НапримерКак динамически регистрировать специфические свойства bean-компонента при инициализации bean-компонента

public class BeanOne { 
    @Value("${prop1}") 
    private String property1; 
} 

public class BeanTwo { 
    @Value("${prop2}") 
    private String property2; 
} 

Я хочу, чтобы зарегистрировать собственность «prop1» и «prop2» успешно инстанцирует выше двух бобов.

Мое приложение настроено с помощью spring-cloud-consul-config. По умолчанию consul не настроен с этими свойствами за это время, приложение автоматически зарегистрирует эти свойства в consul через ecwid/consul-api

В настоящее время приложение выдает «IllegalArgumentException» с сообщением «Не удалось разрешить placeholder 'prop1' в строке значение «$ {prop1}»

Любые предложения, чтобы избежать указанной выше ошибки.

ответ

0

Существуют различные способы, вы можете сделать это.

Мой предпочтительный подход, чтобы установить свойства в одном или нескольких файлах извне и затем используйте @PropertySource ("file: /// full-pat h-to-property-file ") в классе @Configuration.

Этот подход в сочетании с пружинными профилями очень эффективен.

Пример, если вы не используете профили:

  1. Создать учетную application.properties файл где-то на вашем компьютере. Хороший место, чтобы поместить это $ {user.home} /. SomeFolder/application.properties
  2. Добавьте значения для prop1 и prop2
  3. изменить права на эту папку и файл. Например, вы можете запустите chmod u на .somefolder и chmod 600 в файле свойств
  4. Создайте класс конфигурации Spring Java и отметьте его @ Конфигурация. Например, вы можете создать ApplicationConfig класс в суб пакете вашего Spring приложения загрузки и аннотирования его @Configuration
  5. Добавить @PropertySource аннотаций следующим образом: @PropertySource ("Файл: /// $ {пользователя. . дом}/SomeFolder/application.properties ")

пример из course на Spring ботинке, AWS, Bootstrap и Stripe:

@Configuration 
@EnableJpaRepositories(basePackages = "com.devopsbuddy.backend.persistence.repositories") 
@EntityScan(basePackages = "com.devopsbuddy.backend.persistence.domain.backend") 
@EnableTransactionManagement 
@PropertySource("file:///${user.home}/.devopsbuddy/application-common.properties") 
public class ApplicationConfig { 
} 

Вот оно!