ToB企服应用市场:ToB评测及商务社交产业平台

标题: Quartz集群增强版_00.How to use?(如何利用) [打印本页]

作者: 欢乐狗    时间: 2024-11-11 18:36
标题: Quartz集群增强版_00.How to use?(如何利用)
Quartz集群增强版_00.How to use?(如何利用)

转载请著名出处 https://www.cnblogs.com/funnyzpc/p/18540378
开源地址 https://github.com/funnyzpc/quartz

表的基本结构

    总的来说任务的设置及开辟基本遵从上图的表的基本关系,除 app 以及 node 之外均需要手动手动设置,app 及 node 在执行端启动的时候会主动天生对应 app 以及 node 的数据 ~
后管设置

先看一下后管的基本页面~
由于 app 与 node 是一对多的关系,这里就放到一个page下:
app新增
node新增
由于node必须关联已有的app才可新增,新增入口在app列表中
另外,需要说明的是:
启用与关闭只操作节点或应用,关闭节点则节点下的所有任务均不会执行,关闭应用则应用关联的所有结点都不会执行任务,同时这个操作也不会变动任务或执行项~
再看看节点任务及执行设置:
任务/执行设置是管理端重要任务,执行设置利用关联任务设置(PID)关联相应的任务(job),执行项(execute)是不可独立存在的!
新增任务设置
管理端开辟设置及集成

这里仅以springboot为例:
  1.     <dependency>
  2.         <groupId>org.quartz-scheduler.internal</groupId>
  3.         <artifactId>quartz-client</artifactId>
  4.         <version>2.3.2</version>
  5.         
  6.         <scope>system</scope>
  7.         <systemPath>${pom.basedir}/src/main/resources/lib/quartz-client-2.3.2.jar</systemPath>
  8.     </dependency>
复制代码
  1. // 这一行是重点!
  2. @SpringBootApplication(exclude = {QuartzAutoConfiguration.class})
  3. public class MeeAdminApplication {
  4.         /**
  5.          * 日志
  6.          */
  7.         private static final Logger LOG= LoggerFactory.getLogger(MeeAdminApplication.class);
  8.         public static void main(String[] args)throws Exception {
  9.                 ConfigurableApplicationContext application = SpringApplication.run(MeeAdminApplication.class, args);
  10.                 Environment env = application.getEnvironment();
  11.                 String ip = InetAddress.getLocalHost().getHostAddress();
  12.                 String port = env.getProperty("server.port");
  13.                 String path = env.getProperty("server.servlet.context-path");
  14.                 LOG.info("\n\t----------------------------------------------------------\n\t" +
  15.                                 "Application MeeAdminApplication is running!\n\t" +
  16.                                 "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
  17.                                 "External: \thttp://" + ip + ":" + port + path + "/\n\t" +
  18.                                 "----------------------------------------------------------");
  19.         }
  20. }
复制代码
  1. @Service
  2. public final class QrtzJobServiceImpl implements QrtzJobService {
  3.     /**
  4.      *   日志
  5.      */
  6.     private static final Logger LOG = LoggerFactory.getLogger(QrtzJobServiceImpl.class);
  7.    
  8.     /**
  9.      * quartz定时任务api
  10.      */
  11.     private final Scheduler scheduler;
  12.     public QrtzJobServiceImpl(DataSource dataSource) {
  13.         this.scheduler = new StdScheduler(dataSource);
  14.     }
  15. }
复制代码
  1.     @Override
  2.     public MeeResult<Integer> updateJobState(String job_id,String state) {
  3.         Object[] result = scheduler.updateJobStateInAll(job_id,state);
  4.         int updateCount = (int)result[0];
  5.         if(updateCount>0){
  6.             return ResultBuild.build(updateCount);
  7.         }else{
  8.             return ResultBuild.fail((String)result[1]);
  9.         }
  10.     }
复制代码
Scheduler 提供了多种多样的api,留意部分接口的区别:

    如果管理端与执行端一体 则无需引入client依赖(quartz-client),也无需在启动类中清除主动装配(QuartzAutoConfiguration),利用sdk也无需利用构造方式传入database,仅此即可:
  1.     @Autowired
  2.     private Scheduler scheduler;
复制代码
执行端开辟设置及集成

  1.         <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-quartz</artifactId>
  4.             <version>${spring-boot-current.version}</version>
  5.             <exclusions>
  6.                 <exclusion>
  7.                     <groupId>org.quartz-scheduler</groupId>
  8.                     <artifactId>quartz</artifactId>
  9.                 </exclusion>
  10.             </exclusions>
  11.         </dependency>
  12.         <dependency>
  13.             <groupId>org.quartz-scheduler.internal</groupId>
  14.             <artifactId>quartz-core</artifactId>
  15.             <version>2.3.2</version>
  16.             
  17.             <scope>system</scope>
  18.             <systemPath>${pom.basedir}/src/main/resources/lib/quartz-core-2.3.2.jar</systemPath>
  19.         </dependency>
复制代码
  1. ### ----------- quartz ------------------
  2. spring.quartz.job-store-type=jdbc
  3. spring.quartz.properties.org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore
  4. spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=6000
  5. spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.jdbcjobstore.impl.org.quartz.StdJDBCDelegate
  6. spring.quartz.properties.org.quartz.jobStore.isClustered=true
  7. # 表名前缀
  8. spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
  9. spring.quartz.properties.org.quartz.scheduler.instanceName=${spring.application.name}
  10. #spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
  11. spring.quartz.properties.org.quartz.threadPool.class=org.quartz.impl.MeeThreadPool
  12. # 线程数配置
  13. spring.quartz.properties.org.quartz.threadPool.threadCount=10
  14. spring.quartz.properties.org.quartz.threadPool.threadPriority=5
  15. # 綫程继承初始化线程的上下文类加载器
  16. spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
  17. #Whether to enable pessimistic lock to control trigger concurrency in the cluster 是否启用悲观锁来控制集群中的触发并发
  18. spring.quartz.properties.org.quartz.jobStore.acquireTriggersWithinLock=true
复制代码
    设置项内里 要留意线程数的设置,如果利用的 MeeThreadPool 则threadCount为最大线程数,核心线程数 threadCount-2 ,最少为2,具体多少按现实CPU核心个数以及是否是IO密集型还是CPU密集型来设置即可~
其次要留意 tablePrefix 如果表名有变动则按照变动后的表名前缀设置即可
以上两种方式皆可,需要留意的是,不管是继承 QuartzJobBean 还是实现的 ``Job,均无需将类著名为spring  bean类(@Service or @Component),Quartz内部自会创建任务类为spring bean ~
开辟留意事项


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4