繁体   English   中英

Spring Cloud配置到Java util属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM