Я столкнулся с ситуацией, когда мне нужно получить выражение 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.