博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
阅读量:6203 次
发布时间:2019-06-21

本文共 7534 字,大约阅读时间需要 25 分钟。

当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯。

通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程!

本篇是在SSM框架——Spring+SpringMVC+Mybatis的搭建教程这篇为基础上进行的,如果不了解SSM搭建请先点击闪现到查看详情:

一:环境介绍

工具:Eclipse+ Mysql

框架:Spring+SpringMVC+Mybatis
日志:logback
构建工具:Maven
单元测试:Junit4
Quartz版本:2.2.1

二:SSMM+Quartz集成详解

1:概述
在之前SSM框架的基础集合Quartz写一个简单的Web项目,实现Quartz的动态添加,修改和删除功能!(这里只是对Cron类型的Trigger进行操作)

2:项目结构

这里写图片描述

3:初始化

在项目中找到初始化sql——quartz_test.sql ,导入自己的数据库中!初始化的表信息如下:

qrtz_blob_triggers,qrtz_calendars, qrtz_fired_triggers, qrtz_locks, qrtz_paused_trigger_grps, qrtz_scheduler_state, qrtz_simple_triggers, qrtz_simprop_triggers,qrtz_triggers, user_t

4:配置文件介绍

(1):在ApplicationContext.xml中添加下面的配置:

这里写图片描述

(2):添加quartz.properties配置文件

# Default Properties file for use by StdSchedulerFactory# to create a Quartz Scheduler Instance, if a different# properties file is not explicitly specified.# #============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName: quartzScheduler org.quartz.scheduler.instanceId = AUTO org.quartz.scheduler.rmi.export: false org.quartz.scheduler.rmi.proxy: false org.quartz.scheduler.wrapJobExecutionInUserTransaction: false #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount: 2 org.quartz.threadPool.threadPriority: 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 #============================================================================ # Configure JobStore #============================================================================ #default config #org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore #持久化配置 org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties:true #============================================================================ #havent cluster spring #============================================================================ org.quartz.jobStore.isClustered = false #数据库表前缀 org.quartz.jobStore.tablePrefix:qrtz_ #org.quartz.jobStore.dataSource:qzDS #============================================================================ # Configure Datasources #============================================================================ #JDBC驱动 Sping去管理dataSource ,这里不在配置数据源信息 #org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver #org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz_test #org.quartz.dataSource.qzDS.user:root #org.quartz.dataSource.qzDS.password:root #org.quartz.dataSource.qzDS.maxConnection:10

5:关键代码简单介绍

(1):过滤器
添加过滤器拦截请求,若用户没有登录,则跳转到登录页面!

a. 新增LoginFilter.java,核心代码如下:

@Override    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; HttpSession session = request.getSession(); //判断Session中是否有登录用户信息 String toke = (String) session.getAttribute(CommonConstant.LONGIN_TOKE); if(!StringUtils.isEmpty(toke)){ chain.doFilter(req, resp); }else{ //若没有则,跳转到登录页面 response.sendRedirect(request.getContextPath() + "/user/toLogin"); } }

b.在web.xml配置过滤器:

LoginFilter
org.ssm.dufy.filter.LoginFilter
LoginFilter
/

(2)BAO和Service接口

Dao主要是用户的一些操作!

public interface IUserDao {    int deleteByPrimaryKey(Integer id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record); User findUser(User user); }

Service主要是对定时任务的一些操作!

package org.ssm.dufy.service;public interface QuartzService { /** * addJob(方法描述:添加一个定时任务) 
* (方法适用条件描述: – 可选) * * @param jobName * 作业名称 * @param jobGroupName * 作业组名称 * @param triggerName * 触发器名称 * @param triggerGroupName * 触发器组名称 * @param cls * 定时任务的class * @param cron * 时间表达式 void * @exception * @since 1.0.0 */ public void addJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName, Class cls, String cron); /** * * @param oldjobName 原job name * @param oldjobGroup 原job group * @param oldtriggerName 原 trigger name * @param oldtriggerGroup 原 trigger group * @param jobName * @param jobGroup * @param triggerName * @param triggerGroup * @param cron */ public boolean modifyJobTime(String oldjobName,String oldjobGroup, String oldtriggerName, String oldtriggerGroup, String jobName, String jobGroup,String triggerName, String triggerGroup, String cron); /** * 修改触发器调度时间 * @param triggerName 触发器名称 * @param triggerGroupName 触发器组名称 * @param cron cron表达式 */ public void modifyJobTime(String triggerName, String triggerGroupName, String cron); /** * 暂停指定的任务 * @param jobName 任务名称 * @param jobGroupName 任务组名称 * @return */ public void pauseJob(String jobName,String jobGroupName); /** * 恢复指定的任务 * @param jobName 任务名称 * @param jobGroupName 任务组名称 * @return */ public void resumeJob(String jobName,String jobGroupName); /** * 删除指定组任务 * @param jobName 作业名称 * @param jobGroupName 作业组名称 * @param triggerName 触发器名称 * @param triggerGroupName 触发器组名称 */ public void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName); /** * 开始所有定时任务。启动调度器 */ public void startSchedule(); /** * 关闭调度器 */ public void shutdownSchedule(); }

操作用户通过Mybatis进行,操作定时器任务,使用的Quartz封装好的接口!

主要的实现代码就不在这里展示!如需查看请看源码!

(3)Controller

(1):UserController

处理一些用户的请求操作!

(2):QuartzController

处理Quartz的请求操作!

6:任务类

package org.ssm.dufy.job;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException; public class HelloWorldJob implements Job{ /** * "0/5 * * * * ? 五秒运行一次 */ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("----hello world---" + new Date()); } }

7:待优化地方

  • 界面的美观性
  • 可以添加Simple类型的Trigger
  • 用户信息的管理
  • 抽象Job的Dao类
    。。。。。。

三:运行效果介绍

有两种方式启动本实例项目:
1:Tomcat方式,Tomcat方式不在讲解!
2:Jetty方式
在pom.xml中配置了Jetty的依赖的插件!

org.apache.maven.plugins
maven-war-plugin
2.4
org.mortbay.jetty
jetty-maven-plugin
8.1.15.v20140411
10
9999
manual
/ssm_quratz
8080
60000

在Eclipse运行步骤如在截图:

这里写图片描述

配置的参数:

-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -Xloggc:%M2_HOME%/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%M2_HOME%/java_pid.hproyuan

配置好之后运行启动不报错就ok!

最后打开浏览器,输入 

3:运行结果图

(1)登录页面

这里写图片描述

(2)任务列表页面

这里写图片描述

(3)新增页面(编辑页面和此类似)

这里写图片描述

(4)Eclipse控制台打印的信息

这里写图片描述

四:源码


欢迎访问我的csdn博客,我们一同成长!

"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"

博客首页

本文为博主-阿飞(dufy)-原创文章,未经博主允许可转载,但请标明出处,谢谢!

转载于:https://www.cnblogs.com/wlsblog/p/8081835.html

你可能感兴趣的文章
bzoj3891[Usaco2014 Dec]Piggy Back*
查看>>
分解质因数的技巧
查看>>
Linux安装JDK步骤
查看>>
C#统计英文文本中的单词数并排序
查看>>
10 个免费的 C/C++ 集成开发环境
查看>>
Django 中 发送邮件
查看>>
USACO 2.3 ;零的数列
查看>>
八、桥接模式--结构模式(Structural Pattern)
查看>>
iOS 在制作framework时候对aggregate的配置
查看>>
Absolute Horizontal And Vertical Centering In CSS
查看>>
store the XML schema with the data
查看>>
访问某类型的元数据的方式-TypeDescriptor 类
查看>>
Oracle 18c 数据库中scott用户不存在的解决方法
查看>>
TensorFlow安装 通过Anaconda Win10 64位 cpu and gpu
查看>>
【leetcode】Max Area of Island
查看>>
LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】
查看>>
LeetCode算法题-Set Mismatch(Java实现)
查看>>
OO第三单元总结——JML规格设计
查看>>
leetcode 4Sum
查看>>
Paper阅读小结
查看>>