首先在spring配置文件中增加:

    <!-- 调度器 -->
<bean name="scheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<property name="quartzProperties"><!-- 需要添加的内容配置 -->
<props>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
</props>
</property>
</bean> <bean name="jobManager" class="com.xxx.crm.schedule.JobManager" init-method="init" destroy-method="close">
<property name="scheduler" ref="scheduler"/>
</bean>

定时任务公共抽象类:

/*
* @author junsheng
* @date 2018年8月13日 上午1:59:48
* @Description: 此处添加文件描述……
*/ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.matchers.GroupMatcher; public abstract class AbstractScheduler {
public void scheduleJob(String name, String group, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> jobParam) throws Exception {
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(name, group).build();
if (jobParam != null) {
jobDetail.getJobDataMap().putAll(jobParam);
}
CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity(name, group).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build(); JobKey jobKey = JobKey.jobKey(name, group);
try {
getScheduler().deleteJob(jobKey); getScheduler().scheduleJob(jobDetail, trigger); getScheduler().start();
} catch (SchedulerException e) {
throw e;
}
} public void deleteJob(String jobName, String jobGroup) throws SchedulerException {
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
try {
getScheduler().deleteJob(jobKey);
} catch (SchedulerException e) {
throw e;
}
} public void deleteAllJob() throws SchedulerException {
List<String> groups = getScheduler().getJobGroupNames();
if (groups == null) {
return;
}
for (String group : groups) {
Set<JobKey> jobKeys = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(group));
if (jobKeys != null) {
for (JobKey jobKey : jobKeys) {
getScheduler().deleteJob(jobKey);
}
}
}
} public void deleteGroupAllJob(String groupName) throws SchedulerException {
Set<JobKey> jobKeys = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(groupName));
if (jobKeys == null) {
return;
}
for (JobKey jobKey : jobKeys) {
getScheduler().deleteJob(jobKey);
}
} public abstract Scheduler getScheduler();
}

定时任务具体类:

import java.util.Map;

import org.quartz.Job;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.xxx.batch.task.BatchBeginJob;
import com.xxx.batch.task.BatchEndJob;
import com.xxx.common.task.AbstractScheduler;
import com.xxx.util.PropertieUtil; public class JobManager extends AbstractScheduler {
private static final String JOB_GROUP = "myGroup"; private final Logger log = LoggerFactory.getLogger(JobManager.class);
private Scheduler scheduler; public void init() {
try {
/*******************************初始化调度任务******************************/
// 批量处理定时器
// 每天凌晨1点执行一次:0 0 1 * * ?
createOrUpdateJob("batchBengin", PropertieUtil.getConfig("cron.batch.begin"), BatchBeginJob.class);
createOrUpdateJob("batchEnd", PropertieUtil.getConfig("cron.batch.end"), BatchEndJob.class);
} catch (Exception e) {
this.log.error("任务调度JobManager启动失败,异常信息:" + e.getMessage(), e);
}
} public void close() {
try {
getScheduler().shutdown(true);
} catch (SchedulerException e) {
this.log.error(e.getMessage(), e);
}
} public void deleteJob(String jobName) throws Exception {
deleteJob(jobName, "myGroup");
} public void createOrUpdateJob(String jobName, String cronExpression, Class<? extends Job> jobClass) throws Exception {
scheduleJob(jobName, "myGroup", cronExpression, jobClass, null);
} public void createOrUpdateJob(String jobGroup, String jobName, String cronExpression, Class<? extends Job> jobClass) throws Exception {
scheduleJob(jobName, jobGroup, cronExpression, jobClass, null);
} public void createOrUpdateJob(String jobName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> param) throws Exception {
scheduleJob(jobName, "myGroup", cronExpression, jobClass, param);
} public void createOrUpdateJob(String jobGroup, String jobName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> param) throws Exception {
scheduleJob(jobName, jobGroup, cronExpression, jobClass, param);
} @Override
public Scheduler getScheduler() {
return this.scheduler;
} public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
}

具体任务执行类:

类1:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.xxx.common.task.SpringContext;
import com.xxx.schedule.JobManager;
import com.xxx.util.PropertieUtil; public class BatchBeginJob implements Job { protected static Logger logger = LoggerFactory.getLogger(BatchBeginJob.class); @Override
public void execute(JobExecutionContext context) throws JobExecutionException { //开启循环定时器
JobManager jobManager = (JobManager) SpringContext.getApplicationContext().getBean("jobManager");
try {
// 每隔1分钟执行一次:0 */1 * * * ? 每隔5秒执行一次:*/5 * * * * ?
jobManager.createOrUpdateJob("batchLoopGroup","batchLoop", PropertieUtil.getConfig("cron.batch.loop"), BatchLoopJob.class);
logger.info("****** 启动循环定时器成功 ******");
} catch (Exception e) {
e.printStackTrace();
}
} }

类2:

import java.util.Map;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.xxx.batch.service.BatchService;
import com.xxx.batch.util.BatchConstants;
import com.xxx.common.task.SpringContext;
import com.xxx.inter.BatchRNeService;
import com.xxx.util.Util; @DisallowConcurrentExecution //使任务以单线程方式执行的注解
public class BatchLoopJob implements Job { protected static Logger logger = LoggerFactory.getLogger(BatchLoopJob.class); @Override
public void execute(JobExecutionContext context) throws JobExecutionException { //远程处理合规业务接口服务
BatchRNeService batchRNeService = (BatchRNeService)SpringContext.getApplicationContext().getBean("batchRNeService");
//本地查询文档表服务
BatchService batchService = (BatchService) SpringContext.getApplicationContext().getBean("batchServiceImpl"); //记录开始时间
long beginTime = System.currentTimeMillis();
try {
Map map = null; //最后查询 状态为 未处理的(STATUS_CD = 1000)
map = batchService.queryOneByHandleStatus(BatchConstants.HANDLE_BEFORE);
//如果存在, 取第一条即可
if(map!=null) {
//调侯彬的接口
logger.info("{}||{}","-------------开始调用处理接口,参数为: ", map.get("haha_ID"));
String jsonString = batchRNeService.batchRemoteService(Util.getInterfaceReq(map));
Map<String, Object> responseMap = Util.getJsonResultObject(jsonString);
logger.info("{}||{}","-------------批接口返回结果:", responseMap);
return;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
logger.info("{}||{}","--------------任务耗时:",(System.currentTimeMillis()-beginTime)+" 毫秒");
} } // @Resource //这里用这个注解无效,必须用getBean的方式
// private BatchRNeService batchRNeService; /* public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config/disconf.beans.xml");
// BatchService service = (BatchService)context.getBean("batchServiceImpl");
// Map map = service.queryOneByHandleStatus("1100");
BatchRNeService service = (BatchRNeService)context.getBean("batchRNeService");
HashMap<Object, Object> map = new HashMap<>();
map.put("haha_ID", 1);
System.out.println("-------------: "+map);
String resp = service.batchRemoteService(Util.getInterfaceReq(map));
System.out.println("----------- --: "+resp);
// {DOC_NAME=h1, DOC_TYPE=1000, haha_ID=1, STATUS_CD=1100, DOC_REGION_CODE=11}
//文件id
// String docId = String.valueOf(map.get("haha_ID"));
// System.out.println(docId);
}*/ }

quartz和spring集成使用一例子【我】的更多相关文章

  1. Quartz与Spring集成

    关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...

  2. Quartz与Spring集成 Job如何自动注入Spring容器托管的对象

    在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的 ...

  3. Quartz与Spring集成(二)

    一.获取quartz详情jar <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...

  4. Quartz 与 Spring集成

    http://www.cnblogs.com/pigwing/archive/2011/07/12/2104002.html http://blog.arganzheng.me/posts/quart ...

  5. 深入浅出mybatis之与spring集成

    目录 写在前面 详细配置 1.dataSource(数据源) 2.sqlSessionFactory(Session工厂) 3.Mapper(映射器) 4.TransactionManager(事务管 ...

  6. 【转】Dubbo使用例子并且和Spring集成使用

    一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService {    public User login(String name, String psw ...

  7. Spring集成Quartz定时器

    <!-- Spring集成Quartz开始 --> <bean id="startQuertz" lazy-init="false" auto ...

  8. spring集成quartz

    spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...

  9. Quartz学习——Spring和Quartz集成详解(三)

    Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...

随机推荐

  1. 部署wp 的时候遭遇的google字体问题

    国内WP CDN问题昨天下午到今天中午 总算解决了WORDPRESS 在 谷歌字体被枪毙之后带来的一系列问题..在天朝想当个 安静的美男子设计师也是那么烦恼的事情捏! 解决办法将所有的带fonts.g ...

  2. mktemp -t -d用法

    mktemp命令用于建立暂存文件或者文件夹,帮助文档如下: Usage: mktemp [OPTION]... [TEMPLATE] Create a temporary file or direct ...

  3. Python自动化运维ansible从入门到精通

    1. 下载安装 在windows下安装ansible:

  4. How to install Lion on PC

    open 'InstallESD.dmg' open '/Volumes/Mac OS X Install ESD/BaseSystem.dmg' rm '/Volumes/Mac OS X Base ...

  5. SVG路径

    前面的话 本文将详细介绍SVG路径 path字符串 路径(path)是一个非常强大的绘图工具,可以用path元素绘制矩形(直角矩形或者圆角矩形).圆形.椭圆.折线形.多边形,以及一些其他的形状,例如贝 ...

  6. Newton方法

    Newton方法主要解决无等式约束和等式约束的最优化方法. 1.函数进行二阶泰勒展开近似 Taylor近似函数求导等于0进而得到Newton步径.(搜索方向) 2.Newton减量(停止条件) 当1/ ...

  7. SQL Server使用笔记

    1.连接字符串 SQL Server 身份验证,如:"server=yqzhu-peter;database=WindWMNew1_DB;uid=sa;pwd=ABcd1234;Connec ...

  8. Git回滚代码暴力法

    Git回滚有多种方式,这里使用的是[强制提交到远程分支] 效果为:如回滚前的提交记录是 1.2.3.4,使用这种方法回滚到2,那么提交记录就变成了1.2. 操作方法: 需要在本地的Git仓库,右键选择 ...

  9. python构建bp神经网络_鸢尾花分类(一个隐藏层)__2.代码实现

    IDE:jupyter   数据集请查看:鸢尾花数据集 测试效果预览   成功率96.7% 代码已上传到码云

  10. LOJ2255. 「SNOI2017」炸弹 (线段树)

    本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...