Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
来源:互联网 发布:mac装双系统还是虚拟机 编辑:程序博客网 时间:2024/05/18 09:28
通过前面的学习,你可能大致了解了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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4:配置文件介绍
(1):在ApplicationContext.xml中添加下面的配置:
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" > <property name="dataSource" ref ="dataSource" /> <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/> <property name="configLocation" value="classpath:quartz.properties"/> </bean>
- 1
- 2
- 3
- 4
- 5
(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: quartzSchedulerorg.quartz.scheduler.instanceId = AUTOorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction: false#============================================================================# Configure ThreadPool#============================================================================org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 2org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: trueorg.quartz.jobStore.misfireThreshold: 60000#============================================================================# Configure JobStore#============================================================================#default config#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore#持久化配置org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
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"); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
b.在web.xml配置过滤器:
<filter> <filter-name>LoginFilter</filter-name> <filter-class>org.ssm.dufy.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
(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);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
Service主要是对定时任务的一些操作!
package org.ssm.dufy.service;public interface QuartzService { /** * addJob(方法描述:添加一个定时任务) <br /> * (方法适用条件描述: – 可选) * * @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();}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
操作用户通过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()); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
7:待优化地方
- 界面的美观性
- 可以添加Simple类型的Trigger
- 用户信息的管理
- 抽象Job的Dao类
。。。。。。
三:运行效果介绍
有两种方式启动本实例项目:
1:Tomcat方式,Tomcat方式不在讲解!
2:Jetty方式
在pom.xml中配置了Jetty的依赖的插件!
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.15.v20140411</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <stopPort>9999</stopPort> <reload>manual</reload> <webAppConfig> <contextPath>/ssm_quratz</contextPath> </webAppConfig> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>8080</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
在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
- 1
配置好之后运行启动不报错就ok!
最后打开浏览器,输入 http://localhost:8080/ssm_quratz
3:运行结果图
(1)登录页面
(2)任务列表页面
(3)新增页面(编辑页面和此类似)
(4)Eclipse控制台打印的信息
四:源码
SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成 源码
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
- Quartz学习——Spring和Quartz集成详解(三)
- Quartz学习——Spring和Quartz集成详解(三)
- Quartz学习总结(1)——Spring集成Quartz框架
- 集成spring和quartz
- Spring+SpringMVC+mybatis+Quartz整合
- ssm(spring+springMVC+Mybatis)框架 集成Quartz(定时任务框架)
- Spring与Quartz集成详解
- Spring集成Quartz--ScheduleThreadPool详解
- Spring+SpringMVC+Mybatis框架集成Apache CXF2.7集成 mongodb集成quartz
- Quartz Spring集成学习笔记
- quartz学习三--Spring集成
- spring和quartz的集成
- Quartz任务调度框架学习四(Quartz集成Spring及在项目中的应用)
- spring整合SpringMVC+Mybatis+ehcache+quartz
- SpringMVC集成quartz
- springmvc集成Quartz
- 新机首次安装 app,请求网络权限“是否允许使用数据”,点允许后,首页数据为空
- List之间赋值
- 算法:二叉树递归遍历
- Laravel5.5 使用Laravel Mix编译Less
- 根文件系统制作时的错误总结
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
- 基于springCloud的分布式架构体系
- 少年郎,你需要封装好的ViewPager工具类
- Spring小结
- Remove Duplicate Numbers in Array
- $.ajax和java后台实现用户登录的功能
- Beginning iPhone Development with Swift 4, 4th Edition.pdf 英文原版 免费下载
- DAY 12
- Lesson5 接口