[英]java.util.Properties: How do I retrieve values from Properties in spring config xml
[英]Spring Cloud config to java util Properties
我正在使用Spring Cloud(带有Spring Boot)来创建一些微服务。 现在,我为其中一项服务启用了石英计划。 以下是代码段(已修剪):
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setOverwriteExistingJobs(true);
factory.setDataSource(dataSource);
factory.setJobFactory(jobFactory);
factory.setAutoStartup(true);
factory.setQuartzProperties(quartzProperties());
return factory;
}
@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.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = default
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
现在我不喜欢这个quartz.properties文件,而是想通过Spring Cloud配置服务器(我已经有一个)共享此配置。 如果将这些配置放在那里,则可以通过@Value
和@ConfigurationProperties
获取它们,但是我不知道如何将其作为java.util.Properties
获取,然后传递给SchedulerFactoryBean.setQuartzProperties()
。 我不想一一阅读并设置。
您不能将Properties
绑定到@ConfigurationProperties
但是可以绑定Map<String,String>
并手动将其转换。
这是使其工作的一种方法:
@Bean
public Properties quartzProperties() {
Properties properties = new Properties();
properties.putAll(StreamSupport
.stream(((AbstractEnvironment) env).getPropertySources().spliterator(), false)
.filter(propertySource -> propertySource instanceof EnumerablePropertySource)
.map(propertySource -> (EnumerablePropertySource) propertySource)
.map(EnumerablePropertySource::getPropertyNames)
.flatMap(Arrays::stream)
.filter(propertyName -> propertyName.startsWith("quartz."))
.collect(Collectors.toMap(
propertyName -> propertyName.replaceAll("^quartz\\.", ""),
propertyName -> env.getProperty(propertyName),
(key1, key2) -> key1
)));
return properties;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.