化妆品网站开发的外文翻译,电子商务网站建设与管理的学后感,上海品牌策划设计,网站推广员什么是quartz#xff1f;Quartz是一个完全由 Java 编写的开源任务调度框架。我们经常会遇到一些问题#xff1a;想每个月27号#xff0c;提醒信用卡还款#xff1b;想每隔1小时#xff0c;提醒一下#xff0c;累了#xff0c;站起来活动一下#xff1b;想每个月定时发送…什么是quartzQuartz是一个完全由 Java 编写的开源任务调度框架。我们经常会遇到一些问题想每个月27号提醒信用卡还款想每隔1小时提醒一下累了站起来活动一下想每个月定时发送邮件等等。总结起来就是在一个有规律的时间点做某件事。quartz可满足复杂触发条件下的定时任务调度比如每月的周一和周五 10点 15分执行。quartz集群可保证系统的高可用性即使一个节点崩了也能保证任务的执行。集群环境下一个任务某个时间点只会在一个节点上运行。核心概念Job 表示一个工作要执行的具体内容JobDetail 表示任务的定义Job 是任务的执行逻辑Trigger 代表一个调度参数的配置什么时候去调Scheduler 代表一个调度容器一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合就可以被 Scheduler 容器调度了。quartz集群应用集群中的节点放在不同的服务器上称为水平集群。节点放在同一台机器上称为垂直集群存在着单点故障问题。Quartz可以借助关系数据库和JDBC作业存储支持集群。数据库脚本链接https://pan.baidu.com/s/1BpDTVRwtN6_VVJqTx9flNQ提取码49ie搭建spring boot环境以定时发送邮件为例每隔1分钟发送一次邮件发送功能忽略不是本例重点。开发工具Intellij IDEA添加maven 依赖配置配置application.ymlserver: port: ${PORT:8090}spring: application: name: learn-quartz datasource: druid: url: ${MYSQL_URL:jdbc:mysql://192.168.0.113:3306/quartz?characterEncodingutf-8useSSLfalse} username: root password: 123456 driverClassName: com.mysql.cj.jdbc.Driver initialSize: 5 #初始建立连接数量 minIdle: 5 #最小连接数量 maxActive: 20 #最大连接数量 maxWait: 10000 #获取连接最大等待时间毫秒 testOnBorrow: true #申请连接时检测连接是否有效 testOnReturn: false #归还连接时检测连接是否有效 timeBetweenEvictionRunsMillis: 60000 #配置间隔检测连接是否有效的时间(单位是毫秒) minEvictableIdleTimeMillis: 300000 #连接在连接池的最小生存时间(毫秒) quartz: job-store-type: jdbc #数据库方式 jdbc: initialize-schema: never #不初始化表结构 properties: org: quartz: scheduler: instanceId: AUTO #默认主机名和时间戳生成实例ID,可以是任何字符串但对于所有调度程序来说必须是唯一的 对应qrtz_scheduler_state INSTANCE_NAME字段 instanceName: clusteredScheduler #quartzScheduler jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX #持久化配置 driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate #我们仅为数据库制作了特定于数据库的代理 useProperties: false #以指示JDBCJobStore将JobDataMaps中的所有值都作为字符串因此可以作为名称 - 值对存储而不是在BLOB列中以其序列化形式存储更多复杂的对象。从长远来看这是更安全的因为您避免了将非String类序列化为BLOB的类版本问题。 tablePrefix: QRTZ_ #数据库表前缀 misfireThreshold: 60000 #在被认为“失火”之前调度程序将“容忍”一个Triggers将其下一个启动时间通过的毫秒数。默认值(如果您在配置中未输入此属性)为60000(60秒)。 clusterCheckinInterval: 5000 #设置此实例“检入”*与群集的其他实例的频率(以毫秒为单位)。影响检测失败实例的速度。 isClustered: true #打开群集功能 threadPool: #连接池 class: org.quartz.simpl.SimpleThreadPool threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true定义Jobpublic class EmailJob extends QuartzJobBean { Value(${server.port}) String port; Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { String time DateUtil.now(); System.out.println(time send email,server port: port); }}配置QuartzConfig.javaConfigurationpublic class QuartzConfig { Bean public JobDetail jobSendEmailDetails() { return JobBuilder.newJob(EmailJob.class).withIdentity(emailJobId) .storeDurably().build(); } /** * 1分钟1次会平均分配到每个节点上 * return */ Bean public Trigger jobOrderCheckTrigger() { return TriggerBuilder.newTrigger().forJob(jobSendEmailDetails()) .withIdentity(sendEmailTriggerId) .withSchedule(CronScheduleBuilder.cronSchedule(0 0/1 * * * ?)) .build(); }}创建2个应用选择Edit Configurations, 在spring boot目录下创建quartz1和quartz2, VM options中分别输入-DPORT8090和-DPORT8091, 启动两个实例同一个任务会在两个实例中轮流执行效果图quartz1quartz2