我具有以下代码以填充我的属性:
@Bean
public Properties quartzProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
quartz.properties
就像:
org.quartz.jobStore.host = localhost
问题是,根据当前环境(loc,dev ...),我需要此属性是一个或另一个。
我们正在寻找一种参数化此值的方法。像这样:
org.quartz.jobStore.host = ${jobHost}
其中jobHost
将包含与环境相关的主机。
我希望我解释得很好。
有什么想法吗?
编辑
我尝试在命令行上设置jobHost
变量:
mvn clean package spring-boot:run -Dspring-boot.run.arguments=--spring.config.additional-location=scheduler-props.properties,--jobHost=localhost
但它可以吸引我:
java.net.UnknownHostException:$ {jobHost}
似乎jobHost
尚未解决。
答案 0 :(得分:0)
实现此目的的好方法是外部化配置。有关详细信息,请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html。
答案 1 :(得分:0)
完全不确定我遇到了您的问题,但是如果您想以编程方式解析主机名,那么
InetAddress.getLocalHost().getHostAddress()
是必经之路
否则,您可以使用-Dpropertyname = value或“环境变量”(System.getProperty(String name)
)以编程方式检索传递给程序的“系统属性”(System.getenv(String name)
)。
@Bean
public Properties quartzProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
propertiesFactoryBean.afterPropertiesSet();
final Properties prop = propertiesFactoryBean.getObject();
prop.setProperty("org.quartz.jobStore.host", System.getProperty("jobHost");
return prop
}