2016-04-02 35 views
0

如果應用程序中不存在bean,我想在bean創建時註冊bean的特定屬性。例如如何在bean初始化時動態註冊bean的特定屬性

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

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

我想註冊屬性'prop1'和'prop2'來成功實例化上述兩個bean。

我的應用程序配置了spring-cloud-consul-config。默認情況下,consul在這段時間內沒有配置這些屬性,應用程序會自動通過ecwid/consul-api將這些屬性註冊到consul

當前應用程序拋出「IllegalArgumentException」消息「Could not resolve placeholder'prop1'in string值「$ {PROP1}」

任何建議,以避免上述錯誤。

回答

0

有多種方法可以做到這一點。

我的首選的方法是在一個或多個文件從外部設置的屬性然後使用@PropertySource(「file:/// full-pat h-to-property-file「)註釋在@Configuration類中。

這種方法與Spring Profiles相結合非常強大。

例如,如果你不使用配置文件:

  1. 創建一個application.properties文件中的某個地方你的電腦上。一個好的 地方放,這是$ {}的user.home /。somefolder/application.properties中
  2. 添加值PROP1和PROP2
  3. 更改該文件夾和文件的權限。例如,您可以使用 在屬性文件上運行.somefolder和chmod 600
  4. 創建一個Spring Java配置類並使用 @Configuration對其進行註釋。例如,你可以在Spring啓動應用程序的子包創建ApplicationConfig 類和註釋 它@Configuration
  5. 添加@PropertySource註解如下: @PropertySource(「文件:/// $ {用戶。首頁}/somefolder/application.properties「)
春啓動,AWS,引導和條紋

從我course一個例子:

@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 { 
} 

這就是它!