如何在bean初始化时动态注册bean特定属性

时间:2016-04-02 10:31:52

标签: spring properties spring-boot placeholder consul

如果应用程序中不存在,我想在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自动将这些属性注册到领事

目前,应用程序抛出“IllegalArgumentException”,并在字符串值“$ {prop1}”中显示消息“无法解析占位符'prop1'”

任何建议都可以避免上述错误。

1 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点。

我首选的方法是在外部设置一个或多个文件中的属性,然后在@中使用@PropertySource(" file:/// full-path-to-property-file")注释配置类。

这种方法与Spring Profiles相结合非常强大。

如果您没有使用配置文件,请执行以下示例:

  1. 在PC上的某个位置创建application.properties文件。一个好的 这个地方是$ {user.home} / .somefolder / application.properties
  2. 添加prop1和prop2
  3. 的值
  4. 更改该文件夹和文件的权限。例如,你可以 在属性文件
  5. 上运行chmod u on .somefolder和chmod 600
  6. 创建一个Spring Java Configuration类并使用它进行注释 @组态。例如,您可以创建ApplicationConfig Spring Boot应用程序的子包中的类和注释 它与@Configuration
  7. 添加@PropertySource注释,如下所示: @PropertySource("文件:/// $ {的user.home} /.somefolder/application.properties")
  8. 我的course关于Spring Boot,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 {
    }
    

    那就是它!

相关问题