1、去quartz官网下载quartz222版本的压缩包,quartz下载,注意:quartz230版本的在docs目录下没有发现dbtable目录(存放生成数据库表的sql文件的目录)。
2、执行创建数据库表的sql文件,我使用的是mysql数据库。
生成的表结构
3、在springboot项目中配置quartz。
31、两种方式配置quartz,
311、第一种是使用自定义的quartzproperties,这是简单配置,如果有其他配置可以参考,quartzproperties配置详情
orgquartzjobStoreuseProperties:true
#orgquartzschedulerinstanceName: quartzScheduler
#orgquartzschedulerinstanceId = AUTO
orgquartzthreadPoolclass = orgquartzsimplSimpleThreadPool
orgquartzthreadPoolthreadCount = 15
orgquartzthreadPoolthreadPriority: 5
orgquartzthreadPoolthreadsInheritContextClassLoaderOfInitializingThread: true
orgquartzjobStoreclass = orgquartzimpljdbcjobstoreJobStoreTX
orgquartzjobStoredriverDelegateClass=orgquartzimpljdbcjobstoreStdJDBCDelegate
orgquartzjobStoreisClustered = false
#orgquartzjobStoreclusterCheckinInterval=20000
orgquartzjobStoretablePrefix = qrtz_
orgquartzjobStoremisfireThreshold = 60000
orgquartzjobStoremaxMisfiresToHandleAtATime = 20
orgquartzschedulerrmiexport: false
orgquartzschedulerrmiproxy: false
orgquartzschedulerwrapJobExecutionInUserTransaction: false
登录后复制

312、使用配置文件配置springboot中的SchedulerFactoryBean。
@Configuration
public class SchedulerConfig implements SchedulerFactoryBeanCustomizer {
@Autowired
private DataSource dataSource;
@Override
public void customize(SchedulerFactoryBean schedulerFactoryBean) {
schedulerFactoryBeansetStartupDelay(10);
schedulerFactoryBeansetOverwriteExistingJobs(true);
schedulerFactoryBeansetDataSource(dataSource);
ClassPathResource resource = new ClassPathResource("quartzproperties");
Properties properties = new Properties();
InputStream in= null;
try {
in = resourcegetInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(in, "UTF-8"));
propertiesload(bf);
schedulerFactoryBeansetQuartzProperties(properties);
} catch (IOException e) {
eprintStackTrace();
}
}
}
登录后复制

321、第二种方式是在applicationproperties文件中的配置,applicationproperties文件中的springquartzproperties 加上quartzproperties中的键值对,效果与quartzproperties类似。
springquartzpropertiesorgquartzjobStoretablePrefix = qrtz_
springquartzpropertiesorgquartzthreadPoolthreadCount = 10
登录后复制
项目中配置orgquartzjobStoretablePrefix = qrtz_,这个配置是默认查询数据库中表的前缀,默认是QRTZ_,以下sql中通过rpt方法组装一条新的sql,替换掉{0},{1},如果没有明确声明就会使用默认值 orgquartzjobStoretablePrefix = QRTZ_,orgquartzschedulerinstanceName: quartzScheduler。
如果进行简单的定时任务,可以使用springboot中默认的quartz配置。
322 自定义配置springboot中的SchedulerFactoryBean。
@Configuration
public class SchedulerConfig implements SchedulerFactoryBeanCustomizer {
@Autowired
private DataSource dataSource;
@Override
public void customize(SchedulerFactoryBean schedulerFactoryBean) {
schedulerFactoryBeansetStartupDelay(10);
schedulerFactoryBeansetOverwriteExistingJobs(true);
schedulerFactoryBeansetDataSource(dataSource);
}
}
登录后复制

4、新建Job
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Systemoutprintln(SystemnanoTime());
}
}
登录后复制
5、数据库中新增job任务脚本,comexamplequartzdemojobTestJob是我本地的测试Job,需要修改成你自己Job类。
INSERT INTO `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('quartzScheduler', 'test2Job', 'testGroup', NULL, 'comexamplequartzdemojobTestJob', '1', '0', '0', '0', NULL);
INSERT INTO `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('quartzScheduler', 'testTrigger2', 'testTriggerGroup', 'test2Job', 'testGroup', NULL, '1554122914000', '1554122913000', '5', 'ACQUIRED', 'CRON', '1554039857000', '0', NULL, '0', NULL);
INSERT INTO `qrtz_cron_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('quartzScheduler', 'testTrigger2', 'testTriggerGroup', '0/1 ', 'Asia/Shanghai');
登录后复制
6、启动项目,查看控制台打印的日志,成功
Failed to override connection auto commit/transaction isolation
在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。
两个并发的事务应该不能 *** 作同一项数据。数据库管理系统通常使用锁来实现这个特征。
你检查下 *** 作是不是并发事物 *** 作同一数据了?
The last packet successfully received from the server was 381,593,869 milliseconds ago The last packet sent successfully to the server was 381,593,869 milliseconds ago is longer than the server configured value of 'wait_timeout' You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem
还有,你的连接上有问题,好慢啊
quartz定时任务配置:
class="orgschelingquartz"
其中:
配置对应的定时任务,可配置多个,名称要唯一,对应的是第二步中配置的
配置,由于要实现动态读取定时任务周期时间,所以我们要写一个类实现,类的内容如下:
publicclassextendsimplements{
privatestaticfinallong=1L;
privatesysParamServiceImpl;
privateStringkey;
publicvoidsetKey(Stringkey)
{
thiskey=key;
}
publicvoidsetSysParamServiceImpl(SysParamServiceImplsysParamServiceImpl)
{
thissysParamServiceImpl=sysParamServiceImpl;
setCronExpression(getCronExpressionFromDB());
}
privateStringgetCronExpressionFromDB()
{
if(StringUtilsisEmpty(key))
return"000/1";
SysParamsysParam=newSysParam();
try
{
sysParam=sysParamServiceImplgetNameByKey(key);
}
catch(Exceptione)
{
eprintStackTrace();
}
if(sysParam!=null&&!StringUtilsisEmpty(sysParamgetParamValue()))
returnsysParamgetParamValue();
return"000/1";
}
}
简单说明一下:key是用来查询数据库配置的CronExpression表达式的查询条件,SysParamServiceImpl是实现查询的类,这几个参数都要从spring配置的CronTriggerFactoryBean参数获取,注意,配置的时候,key值的配置要在SysParamServiceImpl的配置之前,否则报空指针
spring配置CronTriggerFactoryBean:
实现了CronTriggerFactoryBean之后,开始配置CronTriggerFactoryBean,现在配置的是InitCronTriggerFactoryBean:
id对应quartz定时任务配置的,参数有三个,第二个和第三个是InitCronTriggerFactoryBean设置内容需要的,第一个则是定时任务执行业务逻辑的类
ps:,这个要配置对应的bean,我的是
配置对应的定时任务执行业务方法的类:
class="orgspringframeworkschelingquartzJobDetailFactoryBean"
简单说明一下:配置的是你需要定时执行的类,下面配置的是定时执行类中需要用到的其他类,这是由于项目启动执行定时任务不能在定时任务类中实例化这些类,要配置才行。
对应的定时任务执行类:
publicclassInquiryQuartzextendsQuartzJobBean{
@Autowired
privateInquiryServiceImplinquiryServiceImpl;
@Override
protectedvoidexecuteInternal(JobExecutionContextarg0)throwsJobExecutionException
{
//实例化接口
inquiryServiceImpl=(InquiryServiceImpl)arg0getJobDetail()getJobDataMap()get("inquiryServiceImpl");
//执行业务方法
quartzStart();
}
publicvoidquartzStart(){
//业务方法
}
}
说明一下:必须要实现QuartzJobBean接口
至此,就可以完成可配置CronExpression表达式的定时任务了!1
以上就是关于springboot+quartz持久化到数据库各表含义全部的内容,包括:springboot+quartz持久化到数据库各表含义、java 定时框架Quartz警告: [WirelessScheduler_QuartzSchedulerThread] WARN org.quartz.impl.jdbcjobsto、spring配置quartz后怎么访问数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)