Динамически генерировать файл Application.properties при весенней загрузке - PullRequest
0 голосов
/ 10 апреля 2019

Я столкнулся с ситуацией, когда мне нужно получить выражение cron из базы данных, а затем запланировать его при загрузке Spring. Я получаю данные с помощью JPA. Теперь проблема в весенней загрузке, когда я использую аннотацию @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 голосов
/ 10 апреля 2019

Рассмотрите возможность использования Quartz Scheduler framework. Он хранит информацию о планировщике в БД. Нет необходимости реализовывать собственную связь с БД, она уже предусмотрена.

Нашел этот пример: https://www.callicoder.com/spring-boot-quartz-scheduler-email-scheduling-example/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...