spring定时器

加入quartz-1.6.1.jar

1.配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
default-lazy-init="true">

<bean id="springContextUtil" class="com.alensic.nursing.common.SpringContextUtil" />

<bean id="messageSchedule" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.alensic.nursing.sysmgr.ScheduleInfoService</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="cronTriggerDAO">
<ref bean="commonQueryDAO"/>
</entry>
<entry key="springContextUtil">
<ref bean="springContextUtil"/>
</entry>
</map>
</property>
</bean>
<!-- 配置定时器 -->
<bean id="cronTrigger" class="com.alensic.nursing.sysmgr.InitCronTrigger">
<property name="jobDetail">
<ref bean="messageSchedule" />
</property>
<!-- <property name="cronExpression">
<value>0 * 08-21 * * ?</value>
</property>
-->
<property name="cronTriggerDAO" ref="commonQueryDAO"/>
</bean>
<!--添加触发器-->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>

package com.alensic.nursing.sysmgr;

import java.io.Serializable;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

import org.helix.core.secure.acegi.User;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.security.core.context.SecurityContextHolder;


import com.alensic.nursing.common.CommonJdbcQuerySupport;

/**
* 动态的设置时间间隔
* @author zhchen
*
*/
public class InitCronTrigger extends CronTriggerBean implements Serializable {
private CommonJdbcQuerySupport cronTriggerDAO;

public CommonJdbcQuerySupport getCronTriggerDAO() {
return cronTriggerDAO;
}

public void setCronTriggerDAO(CommonJdbcQuerySupport cronTriggerDAO) throws ParseException{
this.cronTriggerDAO = cronTriggerDAO;
String cronException = getCronExceptionDB();
setCronExpression(cronException);
}

private String getCronExceptionDB(){
if(SecurityContextHolder.getContext().getAuthentication() == null)
return "2/3 * * * * ?";
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String sql = "SELECT setting_value FROM t_sys_setting WHERE group_no = ? AND setting_key = ?";
Object hosPital = user.getAttribute("sessionHospitalId");
if(hosPital == null)
return "0 10 * * * ?";
List<Map<String, Object>> list = cronTriggerDAO.getJdbcTemplate().queryForList(sql,new Object[]{hosPital,"period"});
if(list.size() == 0)
return "0 10 * * * ?";
return "0 "+list.get(0).get("setting_value").toString()+" * * * ?";
}
}


package com.alensic.nursing.sysmgr;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.alensic.nursing.common.CommonJdbcQuerySupport;
import com.alensic.nursing.common.SpringContextUtil;

/**
* 消息定时器
* @author zhchen
*
*/
public class ScheduleInfoService extends QuartzJobBean{

protected final Log logger = LogFactory.getLog(getClass());

private CommonJdbcQuerySupport cronTriggerDAO;

private SpringContextUtil springContextUtil;

@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("spring定时器");
try {
updateNotificationInterval();
} catch (ParseException e) {
e.printStackTrace();
} catch (SchedulerException e) {
e.printStackTrace();
}
}

/**
* 动态的设置时间间隔
*
* @author zhchen
* @throws SchedulerException
* @throws ParseException
*/
public void updateNotificationInterval() throws SchedulerException,ParseException {
Scheduler scheduler = (Scheduler) springContextUtil.getBean("schedulerFactory");
String dbCronExpression = getCronExceptionDB();
String cronExpressionTime = dbCronExpression.split(",")[0];
String isClosed = dbCronExpression.split(",")[1];
if("true".equals(isClosed)){
scheduler.pause();//关闭
return;
}else{
scheduler.start();//开始
}
// 运行时可通过动态注入的scheduler得到trigger
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"cronTrigger", Scheduler.DEFAULT_GROUP);

String originConExpression = trigger.getCronExpression();

if(!originConExpression.equalsIgnoreCase(cronExpressionTime)){
// 把定时器的执行时间间隔改为每5秒钟执行一次
trigger.setCronExpression(cronExpressionTime);
scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);

System.out.println("task start time: " + new Date());
System.out.println("Task test success!");
System.out.println("task end time: " + new Date());
}
}

/**
* 查询系统设置消息提示的信息
* @return
*/
private String getCronExceptionDB(){
String cronException = "0 10 * * * ?,false";
String sql = "SELECT setting_value,setting_key FROM t_sys_setting WHERE group_no = ?";
/*if(SecurityContextHolder.getContext().getAuthentication() == null)
return cronExceptionTime;
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Object hosPital = user.getAttribute("sessionHospitalId");
System.out.println("*****" + sql);
if(hosPital == null)

return cronExceptionTime;*/
List<Map<String, Object>> list = cronTriggerDAO.getJdbcTemplate().queryForList(sql,new Object[]{"0100001"});
if(list.size() == 0)
return cronException;
for(Map<String, Object> map:list){
if("period".equals(map.get("setting_key"))){
cronException = cronException.replace("0 10 * * * ?", "0/"+map.get("setting_value").toString()+" * * * * ?");
continue;
}else if("is_close".equals(map.get("setting_key"))){
cronException = cronException.replace("false", map.get("setting_value").toString());
}
}
System.out.println("time: " + new Date());
return cronException;
}

public CommonJdbcQuerySupport getCronTriggerDAO() {
return cronTriggerDAO;
}

public void setCronTriggerDAO(CommonJdbcQuerySupport cronTriggerDAO) {
this.cronTriggerDAO = cronTriggerDAO;
}

public SpringContextUtil getSpringContextUtil() {
return springContextUtil;
}

public void setSpringContextUtil(SpringContextUtil springContextUtil) {
this.springContextUtil = springContextUtil;
}

}

package com.alensic.nursing.common;


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
* 获取spring容器,以访问容器中定义的其他bean
*/
public class SpringContextUtil implements ApplicationContextAware {

// Spring应用上下文环境
private static ApplicationContext applicationContext;

/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*/
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}

public static ApplicationContext getApplicationContext() {
return applicationContext;
}

/**
* 获取对象 这里重写了bean方法,起主要作用
*
* @param name
* @throws BeansException
*/
public static Object getBean(String beanId) throws BeansException {
return applicationContext.getBean(beanId);
}
}

Scheduler类有很多功能函数,你使用自动提示看看就知道了


1.如果开发的是web应用,那么在web.xml里面加入

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.加载xml
ApplicationContext context = new ClassPathXmlApplicationContext("quartz-config.xml");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值