【发布时间】:2017-07-20 13:40:56
【问题描述】:
我正在尝试使用 SpringBoot 运行 Quartz Scheduler。使用 Quartz Jdbc 数据存储。出于安全原因,我们希望从属性文件中选择 Db 凭据。根据我从这里(Using env variable in Spring Boot's application.properties)和 springBoot 文档的理解,SpringBoot 会自动替换 application.properties 中的环境变量,但我没有看到这个。这是我在运行应用程序之前采购的系统环境文件
export DB_HOST=localhost
export DB_PORT=11111
export DB_USER=root
export DB_PASSWORD=root
export QUARTZ_DB_NAME=quartz
这是我的 application.properties
org.quartz.dataSource.quartzDataSource.URL =jdbc:mysql://${DB_HOST}:${DB_PORT}/${QUARTZ_DB_NAME}
org.quartz.dataSource.quartzDataSource.user = ${DB_USER}
org.quartz.dataSource.quartzDataSource.password = ${DB_PASSWORD}
还有我的配置类
@Configuration
public class ConfigureQuartz {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException
{
final SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();
quartzScheduler.setSchedulerName("mdsScheduler");
quartzScheduler.setQuartzProperties(quartzProperties());
final AutoWiringSpringBeanJobFactory jobFactory = new AutoWiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
quartzScheduler.setJobFactory(jobFactory);
return quartzScheduler;
}
@Bean
public Properties quartzProperties() throws IOException {
final PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/application.properties"));
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
但是当我使用 java -jar .java 运行我的 spring 应用程序时,我没有看到被替换的值。
我可以通过使用 System.getEnv() 读取值来解决问题,但如果这些值可以被替换,那就太好了。不知道为什么它不起作用:(
【问题讨论】:
-
当然它不会替换占位符。您正在使用
PropertiesFactoryBean自己加载属性。占位符替换是启动/属性占位符功能。 -
那么,如果我不使用 PropertiesFactoryBean ,它应该可以自己使用?
-
Spring Boot 已经加载了该文件,所有属性都可以通过
Environment对象获得。 -
但是 springboot 会替换 application.properties 中的值,以便我可以从那里使用它。
-
它已经取代了它们。如前所述,它们已做好充分准备。
标签: java spring-boot quartz-scheduler