Quartz定时任务
来源:互联网 发布:什么是数据的有效性 编辑:程序博客网 时间:2024/06/03 07:24
有关于定时任务,是之前公司项目有一个定时任务需求,比如周末公司休息,但是公司网站的文章需要提前存入数据库,然后周六凌晨或者自定义一个时间发布出去;所以研究了一下然后做出来了,下面是我做的流程
一、我引进的jar包
1、log4j-1.2.17
2、quartz-2.2.1.jar
3、quartz-jobs-2.2.1.jar
3、slf4j-api-1.7.12.jar
4、slf4j-log4j12-1.7.12.jar
二、流程和逻辑思路
数据库新增一张表定时任务的表
注释:表里面关键的是executetime(执行时间),articleid(文章编号)
文章表存入的close字段的状态为1,前端不会展示
将需要定时执行的任务都存入该表,并且任务的执行状态为1
1: 配置文件的修改,在spring-context.xml中加入以下代码
2:配置定时任务的bean
public class QuartzScheduleJob implements Serializable{/** serialVersionUID*/private static final long serialVersionUID = -929195342689371565L;public static final String STATUS_RUNNING = "1";public static final String STATUS_NOT_RUNNING = "0";public static final String CONCURRENT_IS = "1";public static final String CONCURRENT_NOT = "0";private Long id;private Date createtime;private Date updatetime;/** * 任务名称 */private String jobname;/** * 任务分组 */private String jobgroup;/** * 任务状态 是否启动任务 */private String jobstatus;/** * 任务执行时间 */private Date executetime;/** * 描述 */private String description;/** * 任务执行时调用哪个类的方法 包名+类名 */private String beanclass;/** * 任务是否有状态 */private String isconcurrent;/** * spring bean */private String springid;/** * 任务调用的方法名 */private String methodname;private Long articleid;//需要定时发送的文章idpublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public Date getCreatetime() {return createtime;}public void setCreatetime(Date createtime) {this.createtime = createtime;}public Date getUpdatetime() {return updatetime;}public void setUpdatetime(Date updatetime) {this.updatetime = updatetime;}public String getJobname() {return jobname;}public void setJobname(String jobname) {this.jobname = jobname;}public String getJobgroup() {return jobgroup;}public void setJobgroup(String jobgroup) {this.jobgroup = jobgroup;}public String getJobstatus() {return jobstatus;}public void setJobstatus(String jobstatus) {this.jobstatus = jobstatus;}public Date getExecutetime() {return executetime;}public void setExecutetime(Date executetime) {this.executetime = executetime;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getBeanclass() {return beanclass;}public void setBeanclass(String beanclass) {this.beanclass = beanclass;}public String getIsconcurrent() {return isconcurrent;}public void setIsconcurrent(String isconcurrent) {this.isconcurrent = isconcurrent;}public String getSpringid() {return springid;}public void setSpringid(String springid) {this.springid = springid;}public String getMethodname() {return methodname;}public void setMethodname(String methodname) {this.methodname = methodname;}public Long getArticleid() {return articleid;}public void setArticleid(Long articleid) {this.articleid = articleid;}}
3:dao层
public interface QuartzScheduleJobMapper {/** * 保存定时任务信息 * * @param quartzScheduleJob * @return */public Long saveEntity(QuartzScheduleJob quartzScheduleJob);/** * 查询所有任务 * * @return */public ListfindEntity();/** * 根据id删除数据 * * @param jobId * @return */public int deleteByPrimaryKey(Long jobId);/** * 根据编号查询数据 * * @param jobId * @return */public QuartzScheduleJob selectByPrimaryKey(Long jobId);/** * 修改数据 * * @param record * @return */public int updateByPrimaryKey(QuartzScheduleJob record);/** * 查询状态为1的任务 * * @return */public List findEntityByStatus();/** * 修改状态 * * @param id * @param jobstatus */public void updateStatus(@Param("id")Long id,@Param("jobstatus") String jobstatus);}
4:mapper.xml
INSERT INTO task_schedule_job(createtime,updatetime,jobname,jobgroup,jobstatus,executetime,description,beanclass,isconcurrent,springid,methodname,articleid) VALUES(#{createtime},#{updatetime},#{jobname},#{jobgroup},#{jobstatus},#{executetime},#{description},#{beanclass},#{isconcurrent},#{springid},#{methodname},#{articleid}) id,createtime,updatetime,jobname,jobgroup,jobstatus,executetime,description,beanclass,isconcurrent,springid,methodname,articleid DELETE FROM task_schedule_jobWHERE WHERE id=#{jobId,jdbcType=BIGINT} UPDATE task_schedule_job SET jobstatus=#{jobstatus} WHERE id=#{id} UPDATE task_schedule_job createtime=#{createtime}, updatetime=#{updatetime}, jobname=#{jobname}, jobgroup=#{jobgroup}, jobstatus=#{jobstatus}, executetime=#{executetime}, description=#{description}, beanclass=#{beanclass}, isconcurrent=#{isconcurrent}, springid=#{springid}, methodname=#{methodname}, articleid=#{articleid}, WHERE id=#{id}
5:service层
public interface QuartzScheduleJobService {/** * 查询所有的任务信息 * * @return */public ListfindEntity();/** * 添加任务信息 * * @param quartzScheduleJob */public void addTask(QuartzScheduleJob quartzScheduleJob);/** * 根据编号查询任务信息 * * @param jobId * @return */public QuartzScheduleJob selectById(Long jobId);/** * * 需要执行的任务 * */public void executeTasks();}
6:service实现类
@Service("quartzScheduleJobService")@Transactional(propagation=Propagation.REQUIRED, rollbackFor={RuntimeException.class})public class QuartzScheduleJobServiceImpl implements QuartzScheduleJobService{public final Logger log = Logger.getLogger(this.getClass());//定时任务信息@Resourceprivate QuartzScheduleJobMapper quartzScheduleJobMapper;//文章@Resourceprivate ArticleMapper articleMapper;/** * 查询所有的任务信息 * * @return */@Overridepublic ListfindEntity() {return quartzScheduleJobMapper.findEntity();}/** * 添加任务信息 * * @param quartzScheduleJob */@Overridepublic void addTask(QuartzScheduleJob quartzScheduleJob) {quartzScheduleJob.setCreatetime(new Date());quartzScheduleJobMapper.saveEntity(quartzScheduleJob);}/** * 根据编号查询任务信息 * * @param jobId * @return */@Override@Transactional(propagation=Propagation.SUPPORTS, readOnly = true)public QuartzScheduleJob selectById(Long jobId) {return quartzScheduleJobMapper.selectByPrimaryKey(jobId);}/** * * 需要执行的任务 * */@Overridepublic void executeTasks(){List joblist = quartzScheduleJobMapper.findEntityByStatus();for(QuartzScheduleJob job1:joblist){Date date = job1.getExecutetime();Date currentdate = new Date();//获取数据库的时间和当前时间做比较年月日相同 就进行修改if(DateUtils.isSameDay(currentdate, date)){articleMapper.updateClose(job1.getArticleid(), 0);quartzScheduleJobMapper.updateStatus(job1.getId(),"0");}//测试两个时间的分钟数是否相同/*if((date.getTime()/60000) == (currentdate.getTime()/60000)){articleMapper.updateClose(job1.getArticleid(), 0);quartzScheduleJobMapper.updateStatus(job1.getId(),"0");}*/}}}
7:定时任务管理类
public class QuartzManager { private Scheduler scheduler; /** * @Description:启动所有定时任务 */ public void startJobs() { try { scheduler.start(); } catch (Exception e) { throw new RuntimeException(e); } } public Scheduler getScheduler() { return scheduler; } public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; }}
8:页面上选择是否为定时文章,如果选择是,则选择该文章定时发送的时间然后和其他值一起传到后台
controller的方法里面判断
@Controller@RequestMapping("/admin")public class ArticleController { // 文章@Resource(name = "articleService")private ArticleService articleService;//定时任务@Resource(name = "quartzScheduleJobService")private QuartzScheduleJobService quartzScheduleJobService;/** * 处理文章添加 * * @param request 请求对象 * @param article 文章对象 * @param cateid 类别 * @param oid 姓氏编号 * @param upfile 上传文件对象 * @return 返回列表页面 */@RequestMapping(value = "/article_add", method = RequestMethod.POST)public String articleAddHandle(HttpServletRequest request,Article article,@RequestParam(required = true, defaultValue = "0") Long cateid,@RequestParam(required = true, defaultValue = "") String oid,@RequestParam(required = false, value = "upfile") MultipartFile upfile,@RequestParam(required = true, defaultValue = "") String tabid,@RequestParam(required = true, defaultValue = "") String quartztime)throws IOException {// 保存信息articleService.saveEntity(article);/*------------ 更新数据结束 ----------------------*///如果文章的close为1 说明是需要定时发送的文章if(article.getClose() == 1){QuartzScheduleJob job = new QuartzScheduleJob();job.setJobname(article.getTitle());Long articleid = article.getId();job.setArticleid(articleid);//设置任务运行时间表达式//quartztime 前端传过来的运行时间Date jodtime = DateUtil.stringToDate(quartztime, "yyyy-MM-dd");job.setExecutetime(jodtime);job.setJobgroup("0");job.setJobstatus("1");job.setIsconcurrent("0");job.setSpringid("quartzScheduleJobService");job.setBeanclass("com.jiuqin.information.service.impl.QuartzScheduleJobServiceImpl");job.setMethodname("executeTasks");//向数据库保存一条记录quartzScheduleJobService.addTask(job);}return "redirect:article_list.do?tabid=" + tabid + "&t=" + new Date().getTime();}
注:有关于quartz的时间表达式的配置,百度就可以了
阅读全文
0 0
- quartz定时任务
- Spring+Quartz定时任务
- Quartz定时任务初学
- Quartz 定时任务
- spring quartz 定时任务
- Spring-quartz定时任务
- spring 定时任务 quartz
- Quartz定时任务学习
- Quartz定时任务学习
- spring quartz 定时任务
- spring Quartz 定时任务
- spring+quartz定时任务
- 定时任务 quartz使用
- quartz 定时任务
- Quartz定时任务配置
- Spring Quartz 定时任务
- Quartz定时任务
- quartz动态定时任务
- Linux内核开发(一)-----动手实现第一个helloworld程序
- JAVA byte有无符号数的转换
- 计蒜客————King's Heir
- 12、javascript中数组常用的函数操作总结
- c++虚函数
- Quartz定时任务
- 补间动画效果
- 手机无线连接电脑、抓取日志、日志检索命令
- node.js 异步流程控制async
- 牛顿法及拟牛顿法
- shell脚本打印多行文本到文件
- 几何不变矩 Hu 矩
- 软件开发过程模型,软件过程模型,软件开发过程几种模型对比
- Android ARMv8编译Caffe2