我遇到了一种情况,我需要从数据库中获取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.
答案 0 :(得分:0)
考虑使用Quartz Scheduler框架。它将调度程序信息存储在DB中。无需实现自己的数据库通信,已经提供了。
找到了以下示例:https://www.callicoder.com/spring-boot-quartz-scheduler-email-scheduling-example/