的Java的配置我的春天引导参考指南中读到这里春季启动ApplicationPidListener
,一个ApplicationPidListener可以在春季启动的应用程序进行编程设置。这很好,但我想再多一点。
当我设置ApplicationPidListener每参考指南这样
app.addListeners(new ApplicationPidListener(pidFileName));
随后象这样启动
app.run(arguments.toArray(new String[arguments.size()]))
该应用于是我obseved该特性的任何命令行覆盖不可用的是可能已被用于实例化ApplicationPidListener pid文件位置。当然,我可以自己解析命令行参数,查找应该用来实例化ApplicationPidListener的属性,但我宁愿不这样做。
我的问题或许可以解决,如果我能提供ApplicationPidListener作为一个Bean在Java配置这样
@Configuration
public static class TestConfig {
@Bean
public ApplicationListener pidListener(@Value("${pidFile:app.pid}") String prop) {
return new ApplicationPidListener(prop);
}
}
,并通过configurationSources.toArray提供这种配置的SpringApplication的构造函数()
new SpringApplication(null, configurationSources.toArray())
通过这种方式,ApplicationPidListener可以全面了解Spring Boot解析的属性,包括命令行覆盖。但是,即使此Config导致创建Bean,当然,它显然不会被应用程序上下文用于创建PID文件。
我的问题是我在编程时被限制为在调用run之前添加侦听器,这意味着我必须查看命令行参数以查看是否存在pid文件覆盖?
谢谢。
你为什么不简单地合并命令行参数和你的'配置资源'包含什么?无论如何,这些'configurationSources'是什么?为什么你需要其他的东西不能用默认的Spring Boot配置支持来实现? – 2014-09-24 05:54:06
这是一个类似模板的应用程序,在配置SpringApplication和调用SpringApplication.run()之上具有构建器层。构建器层的存在是为了让新的微服务开发人员不必非常详细地了解Spring Boot配置。 – ae6rt 2014-09-24 08:41:10