我试图使用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()读取值来解决这个问题,但如果可以替换这些值,那么这将是很好的 . 不知道为什么它不工作:(