为什么80%的码农都做不了架构师?>>>
注意:Spring 3.0以上版本不在使用CronTriggerBean, 请使用CronTriggerFactoryBean。因为在Spring 3.0版本中,内置的Quartz版本是小于2.0的,而spring3.0以上使用的Quartz版本>=2.0。接口不兼容, 请选择合适的版本并正确配置,否则会报错。
Quartz的两种使用方法
1.继承org.springframework.scheduling.quartz.QuartzJobBean类的方式
2.POJO + 配置 的方式
(推荐第二种,作业类只是一个简单的POJO,加上配置文件就可以运行,更加灵活!)
两种调度任务触发机制:
1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean
2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean
package com.dataManager.job;import java.sql.Timestamp;
import java.util.Date;import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;import com.dataManager.service.MonitorOutputService;
import com.dataManager.utility.log.Log4jConfig;
import com.dataManager.utility.log.Log4jConfigFactory;
import com.dataManager.utility.transformat.FormatCalendar;/*** 使用一个简单的pojo */
public class MonitorDeleteJob{private Log4jConfig logger = Log4jConfigFactory.create(MonitorDeleteJob.class);@Autowiredprivate MonitorOutputService monitorOutputService;public void execute() throws JobExecutionException {Date date = new Date();try {int m = monitorOutputService.deleteBeforeDate(FormatCalendar.offsetTime(date, 4, -1));logger.debug((double) m, "", "定期删除监控数据:" + new Timestamp(date.getTime()));} catch (Exception e) {StackTraceElement[] trace = e.getStackTrace();logger.error(null, trace[0].getMethodName(), trace[0].getLineNumber(), e.toString());}}public static void main(String[] args) throws JobExecutionException {MonitorDeleteJob x = new MonitorDeleteJob();x.execute();}
}
======================== 以下不相关===================================
被调度的任务时一个简单的POJO, execute方法的名字并不是强制规定,只不过刚开始写这段代码的时候,使用第一种方法,实现了InterruptableJob接口,其实不必如此。
在实际使用中一开始获取monitorOutputService的时候采用一下方式获得,这样在测试环境下是正确的,但是在项目正常启动的时候,hibernate开始无限循环的加载映射表与javaBean,导致系统启动超时。
private MonitorOutputService monitorOutputService = (MonitorOutputService) SpringBeanUtil.getSpringBean("monitorOutputService");
public static Object getSpringBean(String springBeanId) {if (UtilValidator.isEmpty(springBeanId)) {return null;}ApplicationContext applicationContext = getBeanFactory();if (applicationContext == null) {return null;}if (!applicationContext.containsBean(springBeanId)) {return null;}return applicationContext.getBean(springBeanId);
}
public static ApplicationContext getBeanFactory() {if (applicationContext == null) {if (!UtilValidator.isExistFileInClassPath(FILENAME_SPRING)) {return null;}applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");}return applicationContext;
}
错误已经查清。。。有点坑----- 无限循环个applicationContext....hibernate死循环只是表象。。因为实在太多了。
六月 07, 2015 11:11:32 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: com.dataManager.entity.Calculate -> calculate
六月 07, 2015 11:11:32 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: com.dataManager.entity.CalType -> cal_type
六月 07, 2015 11:11:32 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
................