gpt4 book ai didi

java - Quartz 和 Spring Boot 的问题

转载 作者:行者123 更新时间:2023-11-30 02:06:42 25 4
gpt4 key购买 nike

所以我遇到了技术挑战,需要帮助。

一个大型项目正在使用 Quartz 调度程序来安排作业在每晚 9 点运行。
然而,计划的作业需要从属性文件中读取值,使用 Autowiring 等获取一些 bean。

当我使用@Autowired和@Value注释时,我发现这些值为空。

问题在于 Quartz 在 spring 容器外部使用 newJob() 创建 JobDetail 对象。正如下面的代码所示。

JobKey jobKey = new JobKey("NightJob", "9-PM Job");
JobDetail jobDetail = newJob(NightJob.class).withIdentity(jobKey)
.usingJobData("Job-Id", "1")
.build();

包装 NightJobjobDetail 对象因此无法使用 spring 访问属性文件或 beans。

这是我的 NightJob

public class NightJob implements Job{

//@Value to read from property file; here
//@Autowired to use some beans; here

@Override
public void execute(JobExecutionContext context) throws JobExecutionException{
}
}

我扫描了 Stack Overflow 并列出了几个解决方案。我还仔细阅读了评论并列出了最重要的反评论。

Suggestion 1: Get rid of Quartz and use Spring Batch due to its good integration with Spring Boot

Counter argument 1: Spring Batch is overkill for simple tasks. Use @Scheduled

Suggestion 2: Use @Scheduled annotations and cron expressions provided by spring

Counter argument 2: Your application will not be future ready if you remove Quartz. Complex scheduling may be required in the future

Suggestion 3 : Use the spring interface ApplicationContextAware.

Counter argument 3: Lots of additional code. Defeats the simple and easy concept of Spring boot

Spring Boot 中是否有一种更简单的方法来访问实现 Quartz 作业的类中的属性文件值和 Autowiring 对象(在这种情况下为 NightJob 类)

最佳答案

正如评论中所写,Spring 通过提供 setter 方法支持将 bean 注入(inject)到 Quartz 作业中:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html

关于java - Quartz 和 Spring Boot 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com