① 有哪位大神对quartz作业调度的数据库持久化熟悉的
quartz只是一个定时框架,能做很多事情,你所说的数据库持久化是指,在定时任务中进行操作数据库吗
② 设置quartz时间时如何存入数据库
quartz一般只这样使用。
1、web.xml中进行相关配置
2、quartz进行逻辑操作
当应用服务器开启,quartz也相对开启。
③ Java中定时任务quartz如何将历史数据写入新表
我建议的做法是在数据库中建一些Quartz的表,MySQL的建、删表脚本,最主要的修改是quartz.properties,如果你使用的是其他数据库,可以下载Quartz的distribution,在\docs\dbTables下。然后我们可以启动Bootstrap类,注册、运行定时任务。你可以发现MySQL的表中已经有此定时任务的记录了。
然后你可以停止Bootstrap类,将Bootstrap类中关于注册、启动定时任务的代码删除或注释,然后启动Bootstrap类,看上一次操作注册的定时任务会不会继续运行。
如无意外,看上一次操作注册的定时任务会继续运行。
④ 如何在quartz的job任务中操作数据库
数据库中建表。建表模版在Quartz包下docs/dbTables下,选择相应的数据库和版本即可。ORACLE的11个Table列表如下:
QRTZ_JOB_LISTENERS:存储有关已配置的 JobListener 的信息
JOB_NAME
JOB_GROUP
JOB_LISTENER
QRTZ_TRIGGER_LISTENERS:存储已配置的 TriggerListener 的信息
QRTZ_FIRED_TRIGGERS:存储与已触发的 Trigger 相关的状态信息,以及相联 Job的执行信息
QRTZ_PAUSED_TRIGGER_GRPS:存储已暂停的 Trigger 组的信息
QRTZ_SCHEDULER_STATE:存储集群中note实例信息,quartz会定时读取该表的信息判断集群中每个实例的当前状态
INSTANCE_NAME 之前配置文件中org.quartz.scheler.instanceId配置的名字,就会写入该字段,如果设置为AUTO,quartz会根据物理机名和当前时间产生一个名字
LAST_CHECKIN_TIME:上次检查时间
CHECKIN_INTERVAL :检查间隔时间
QRTZ_LOCKS:存储程序的悲观锁的信息(假如使用了悲观锁)
QRTZ_SIMPLE_TRIGGERS:存储简单的Trigger,包括重复次数,间隔,以及已触的次数
TRIGGER_NAME :qrtz_triggers表trigger_name的外键
TRIGGER_GROUP:qrtz_triggers表trigger_group的外键
REPEAT_COUNT :重复次数
REPEAT_INTERVAL:时间间隔
TIMES_TRIGGERED:触发次数
QRTZ_CRON_TRIGGERS:存储cron表达式表
TRIGGER_NAME :qrtz_triggers表trigger_name的外键
TRIGGER_GROUP:qrtz_triggers表trigger_group的外键
CRON_EXPRESSION:cron表达式
TIME_ZONE_ID :时区
QRTZ_TRIGGERS:保存trigger信息
⑤ quartz定时器问题,要往数据库插入数据,报no session
定时器的数据库脚本有没有导入
给你看下我的配置
⑥ spring配置quartz后怎么访问数据库
quartz定时任务配置:
<bean id="scheler"
class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
</list>
</property>
</bean>
其中:
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
配置对应的定时任务,可配置多个,名称要唯一,对应的是第二步中配置的CronTriggerFactoryBean
CronTriggerFactoryBean配置,由于要实现动态读取定时任务周期时间,所以我们要写一个类实现CronTriggerFactoryBean,类的内容如下:
public class InitCronTriggerFactoryBean extends CronTriggerFactoryBean implements Serializable {
private static final long serialVersionUID = 1L;
private SysParamServiceImpl sysParamServiceImpl;
private String key;
public void setKey(String key)
{
this.key = key;
}
public void setSysParamServiceImpl(SysParamServiceImpl sysParamServiceImpl)
{
this.sysParamServiceImpl = sysParamServiceImpl;
setCronExpression(getCronExpressionFromDB());
}
private String getCronExpressionFromDB()
{
if(StringUtils.isEmpty(key))
return "0 0 0/1 * * ?";
SysParam sysParam = new SysParam();
try
{
sysParam = sysParamServiceImpl.getNameByKey(key);
}
catch (Exception e)
{
e.printStackTrace();
}
if(sysParam != null && !StringUtils.isEmpty(sysParam.getParamValue()))
return sysParam.getParamValue();
return "0 0 0/1 * * ?";
}
}
简单说明一下:key是用来查询数据库配置的CronExpression表达式的查询条件,SysParamServiceImpl 是实现查询的类,这几个参数都要从spring配置的CronTriggerFactoryBean参数获取,注意,配置的时候,key值的配置要在SysParamServiceImpl 的配置之前,否则报空指针
spring配置CronTriggerFactoryBean:
实现了CronTriggerFactoryBean之后,开始配置CronTriggerFactoryBean,现在配置的是InitCronTriggerFactoryBean :
<bean id="InquiryCronTrigger" class="cn.com.shopec.quartz.utils.InitCronTriggerFactoryBean">
<property name="jobDetail" ref="InquiryJobDetail" />
<property name="key" value="inquiryQuartzParam" />
<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />
</bean>
id对应quartz定时任务配置的<ref bean="InquiryCronTrigger"/>,参数有三个,第二个和第三个是InitCronTriggerFactoryBean设置内容需要的,第一个<property name="jobDetail" ref="InquiryJobDetail" />则是定时任务执行业务逻辑的类
ps:<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />,这个要配置对应的bean,我的是
<bean id="sysParamServiceImpl" class="cn.com.shopec.core.system.service.impl.SysParamServiceImpl">
</bean>
配置对应的定时任务执行业务方法的类:
<bean id="InquiryJobDetail"
class="org.springframework.scheling.quartz.JobDetailFactoryBean">
<property name="rability" value="true" />
<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />
<property name="jobDataAsMap">
<map>
<entry key ="inquiryServiceImpl" value-ref="inquiryServiceImpl"/>
</map>
</property>
</bean>
简单说明一下:<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />配置的是你需要定时执行的类,<property name="jobDataAsMap"> 下面配置的是定时执行类中需要用到的其他类,这是由于项目启动执行定时任务不能在定时任务类中实例化这些类,要配置才行。
对应的定时任务执行类:
public class InquiryQuartz extends QuartzJobBean {
@Autowired
private InquiryServiceImpl inquiryServiceImpl;
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException
{
// 实例化接口
inquiryServiceImpl = (InquiryServiceImpl) arg0.getJobDetail().getJobDataMap().get("inquiryServiceImpl");
// 执行业务方法
quartzStart();
}
public void quartzStart(){
// 业务方法...
}
}
说明一下:必须要实现QuartzJobBean 接口
至此,就可以完成可配置CronExpression表达式的定时任务了!1
⑦ quartz+hibernate+spring 频繁操作数据库,出现 数据库连接超过最大连接数
spring
quartz如何动态配置时间
1.
目的:动态设置时间,触发相应的任务
2.
系统架构为
struts
+
spring
+
hibernate
3.
实现步骤:
在页面上设置时间;
将时间转换为unix
cron
expression;
将转换后的时间规则表达式记录到数据库中(也可以写...
⑧ quartz如何与hibernate共用数据源
quartz是定时调用的,是否你调用一次之后你的连接就关闭了,在hibernate里面如果你要直接操作session的话可以用那个线程安全的session就是hibernateTemplate.getSessionFactory().getCurrentSession().connection()方法获取的,这个session会自动管理的无须手动关闭。
⑨ 急求急求,quartz中有几张数据库表是要写东西的怎么写,谁有动态添加job的项目
我最近也做了这样一个项目,我也尝试动态添加Job,这样做有些困难。
所以我换了一种方法,可以实现同样的效果。
我建议只设置一定数量的Job(其实一个就可以,比如你的任务是1个小时倍数的周期,可以设配置1个小时触发一次),然后调用检查所有需要运行的任务(可以建一张类似Job的业务表,记录cronExpression和延时时时间),然后用cronExpression.getNextValidTimeAfter函数检查下一个单位时间需要运行的任务,然后可以用其他的类似Timer来做定时执行。
请根据具体业务来设计,希望对你有帮助,谢谢!