2. 节点争抢Job问题
因为Quartz使用了一个随机的负载均衡算法,Job以随机的方式由不同的实例执行。Quartz官网上提到当前,还不存在一个方法来指派(钉住) 一个 Job 到集群中特定的节点。
解决:重写org.quartz.impl.jdbcjobstore.StdJDBCDelegate类selectTriggerToAcquire方法
方法内改动:
String groupConf = System.getProperty("spring.profiles.task");//根据分组查,也可以改成具体某个task,spring.profiles.task 是自己添加的启动配置 -Dspring.profiles.task='分组名'
if ("".equals(groupConf)) {
ps = conn.prepareStatement(rtp(SELECT_NEXT_TRIGGER_TO_ACQUIRE_ALL));
} else {
ps = conn.prepareStatement(rtp(SELECT_NEXT_TRIGGER_TO_ACQUIRE));
}
Quartz框架(七)— Quartz集群原理Quartz框架(一)—Quartz的基本配置Quartz框架(二)—jobstore数据库表字段详解Quartz框架(三)—任务的并行/串行执行Quartz框架(四)—mi...