Spring Boot自定义属性 - 当类不在应用程序上下文中时如何包含externalize属性

时间:2016-11-29 10:32:20

标签: spring-boot properties configuration

很难理解,但我的应用程序需要一种格式。我有一些自定义库,它们包含在运行时,因此它们不在spring应用程序上下文中。为了从春季启动应用程序获取apis,我获取了所需的apis并将其上传到我的外部类。

举例:

HashValueService hashValueService 
   = (HashValueService) appContext.getBean("hashValueServiceImpl");

ServiceList srvList = new ServiceList();
    srvList.setHashValueService(hashValueService);

通过这种方式,我可以访问我的应用程序上下文中的数据库。

我在整个应用程序中分发了很多属性。所以我想使用默认的application.properties来集中我的应用程序中常用的属性,比如密钥库。

为此我用这行编辑了application.properties:

application.keystore=server.jks

但是当然Spring的@Value的使用确实显示了该属性的null,因为这个类不在我的应用程序上下文中:

@Value("${application.keystore}")
private String keystore;

您是否有想要将此属性覆盖到此客户库?也许创建一个新的属性文件会有帮助吗?非常感谢你。

1 个答案:

答案 0 :(得分:1)

Spring的大部分魔法由BeanPostProcessor完成。好好看看他们 - link

@Value布线(以及更多)由AutowiredAnnotationBeanPostProcessor执行,您可以将它用于您的目的:

AutowiredAnnotationBeanPostProcessor beanPostProcessor = 
          appContext.getBean(AutowiredAnnotationBeanPostProcessor.class);
ServiceList srvList = new ServiceList();

beanPostProcessor.processInjection(srvList);

之后,您的ServiceList应初始化String keystore字段。