在Spring Boot中动态生成Application.properties文件

时间:2019-04-10 13:28:23

标签: spring-boot jpa

我遇到了一种情况,我需要从数据库中获取cron表达式,然后在Spring启动中安排它。我正在使用JPA提取数据。现在问题出在spring boot中,当我使用@Scheduled批注时,它不允许我直接使用db值,因为它仅是常量值。因此,我打算做的是动态生成属性文件并从属性文件读取cron表达式。但是这里我也面临一个问题。在目标目录中创建的动态生成的属性文件。 所以我不能在程序加载时使用它。 那么,谁能协助我从资源文件夹中读取动态生成的文件,或者如何安排在春季启动时从数据库中获取cron表达式?

如果我将玉米表达的所有详细信息放在属性文件中,则可以安排作业。 最新尝试动态生成属性文件。

    @Configuration
    public class CronConfiguration {

        @Autowired
        private JobRepository jobRepository;

        @Autowired
        private ResourceLoader resourceLoader;

        @PostConstruct
        protected void initialize() {
            updateConfiguration();
        }

        private void updateConfiguration() {
            Properties properties = new Properties();
            List<Job> morningJobList=new ArrayList<Job>();
            List<String> morningJobCornExp=new ArrayList<String>();
           // Map<String,String> map=new HashMap<>();
            int num=1;
            System.out.println("started");
           morningJobList= jobRepository.findByDescriptionContaining("Morning Job");
           for(Job job:morningJobList) {
               //morningJobURL.add(job.getJobUrl());
               morningJobCornExp.add(job.getCronExp());
           }
           for(String cron:morningJobCornExp ) {
               properties.setProperty("cron.expression"+num+"=", cron);
               num++;
           }       

            Resource propertiesResource = resourceLoader.getResource("classpath:application1.properties");
            try (OutputStream out = new BufferedOutputStream(new FileOutputStream(propertiesResource.getFile()))) {
                properties.store(out, null);
            } catch (Exception ex) {
                // Handle error
                ex.printStackTrace();

            }
        }   
}

Still it is not able to write in properties file under resource folder.

1 个答案:

答案 0 :(得分:0)

考虑使用Quartz Scheduler框架。它将调度程序信息存储在DB中。无需实现自己的数据库通信,已经提供了。

找到了以下示例:https://www.callicoder.com/spring-boot-quartz-scheduler-email-scheduling-example/