Quartz Spring Boot:环境属性

时间:2019-01-09 14:23:49

标签: java spring spring-boot quartz-scheduler

我具有以下代码以填充我的属性:

@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尚未解决。

2 个答案:

答案 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
}