(转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

http://blog.csdn.net/u010648555/article/details/60767633

 

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

通过前面的学习,你可能大致了解了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中添加下面的配置:

<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>

 

(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,核心代码如下:

    @Overridepublic 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配置过滤器:

 <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>

 

(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(方法描述:添加一个定时任务) <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(); } 

 

操作用户通过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的依赖的插件!

<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>

 

在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
  • 1

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

最后打开浏览器,输入 http://localhost:8080/ssm_quratz

3:运行结果图 
(1)登录页面

(2)任务列表页面

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

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

四:源码

SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成 源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

被流氓360设置浏览器主页的解决办法(如果你也遇到了跟我一样的问题,不妨看一下是不是这个原因)...

最近电脑罢工&#xff0c;重装了系统&#xff1b;很多常用软件都不得不重新安装&#xff0c;其实这都不是事儿&#xff0c;现在基本上都是百兆光纤了&#xff0c;下载安装都很顺溜。 浏览器也在安装之列&#xff0c;因为搞开发所以谷歌火狐浏览器都是必装的&#xff1b;平时基本…

BZOJ1834 [ZJOI2010]network 网络扩容

网络流训练好题。。。但是要给差评&#xff01;蒟蒻表示这就是板子题&#xff0c;然后做了半个小时T T 先跑一边最大流&#xff0c;得到第一问答案ans。 第二问&#xff1a;原先的边不动&#xff0c;费用为0。 然后对每条边在上面再加一条边&#xff0c;流量为inf&#xff0c;费…

android 更新平台,Android更新平台架构方案

这篇文章是去年写的&#xff0c;我们的两款app一直这使用umeng的更新服务&#xff0c;但是16年umeng开始放弃更新服务&#xff0c;考虑到切换到其他更新平台也会面临这样的问题&#xff0c;我开始着手自己搭建一个更新平台。整体方案包含前后端&#xff0c;客户端代码封装成jar…

Storm编程入门API系列之Storm的可靠性的ACK消息确认机制

概念&#xff0c;见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制&#xff1f; 答&#xff1a;想要保住数据不丢&#xff0c;或者保住数据总是被处理。即若没被处理的&#xff0c;得让我们知道。 public void nextTuple() {num;System.out.…

iOS网络编程开发-数据加密

iOS网络编程开发-数据加密 一、简单说明 1.说明 在开发应用的时候&#xff0c;数据的安全性至关重要&#xff0c;而仅仅用POST请求提交用户的隐私数据&#xff0c;还是不能完全解决安全问题。 如&#xff1a;可以利用软件&#xff08;比如Charles&#xff09;设置代理服务器&am…

图片向上滚动字幕代码html,如何通过制作滚动字幕的软件实现这种片尾的向上滚动字幕效果...

如何制作滚动字幕 特殊滚动类字幕制作 向上向下向左向右滚动字幕制作效果 含拖动和消失全程 真是酷B了爽呆了&#xff0c;赶快学习吧&#xff01;电影、连续剧等影视作品片尾&#xff0c;都会在播放片尾曲时&#xff0c;出现向上滚动的字幕&#xff0c;显示演员表、导演、编剧等…

【图片服务器】搭建Nginx图片服务器

一、安装Nginx 二、安装vsftpd 三、开始搭建Nginx图片服务器 1、效果 例如&#xff1a;图片通过ftp服务上传到/home/ftpuser/www/images目录下&#xff0c;我想通过访问Nginx服务器来访问ftp目录下的图片文件&#xff0c;该url为http://192.168.128.128/images/xxx.jpg。即使用…

html怎么让方块自动旋转,如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)...

本篇文章给大家带来的内容是关于如何使用纯CSS实现一个圆环旋转错觉的动画效果&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。效果预览源代码下载https://github.com/comehope/front-end-daily-challenges代码解读定义 dom&…

同志亦凡人第五季/全集BQueer As Folk 5迅雷下载

同志亦凡人 第五季 Queer as Folk Season 5 (2005) 本季看点&#xff1a;这是一群生活在匹兹堡男人和男人&#xff0c;女人和女人的故事。在他们的王国里有各色人物。王国的国王Brian&#xff08;葛尔?哈罗德 Gale Harold 饰&#xff09;&#xff0c;只追求性不问爱&#xff1…

html怎么使图片无法另存为,如何禁止图片另存为?禁止网页另存为到本地的方法...

在很多企事业单位&#xff0c;处于商业机密保护的需要&#xff0c;常常需要禁止一些文件格式的“另存为”功能&#xff0c;防止通过“另存为”将文件另行保存&#xff0c;据为己有的目的&#xff1b;尤其是在局域网中访问服务器共享文件的时候&#xff0c;常常需要禁止将共享文…

正益工场为京西创客工场输送双创“软”实力

12月30日&#xff0c;中关村门头沟科技园“京西创客工场”正式揭牌&#xff0c;这里将成为京西“生态科创”的聚集地。正益工场作为唯一入驻的“移动互联网”双创生态平台&#xff0c;将为双创输送“移动技术移动模式”等软实力。北京市副市长隋振江、市政协、中关村管委会等领…

几种服务器端IO模型的简单介绍及实现(转载)

作者&#xff1a;阿凡卢 出处&#xff1a;http://www.cnblogs.com/luxiaoxun/服务器端几种模型&#xff1a; 1、阻塞式模型&#xff08;blocking IO&#xff09; 我们第一次接触到的网络编程都是从 listen()、accpet()、send()、recv() 等接口开始的。使用这些接口可以很方便的…

2021年高考成绩查询襄阳状元,大胆猜测一下,2021年高考,湖北省文理状元会花落谁家?...

随着2021年高考的逼近&#xff0c;考生进入紧张有序的复习中&#xff0c;家长也在为孩子筹谋着哪所学校更适合&#xff0c;作为吃瓜群众的我们&#xff0c;可能更关注今年湖北省的文理科状元会花落谁家&#xff0c;要知道&#xff0c;一所学校如果可以出现一名高考状元&#xf…

为什么写Java程序需要接口

为什么写Java程序需要接口 我之所以以这个作为标题&#xff0c;并不是为了玩噱头&#xff0c;讲一些似是而非的空话&#xff0c;还是以探索加发现&#xff0c; 追本溯源的讲解一下为什么Java需要接口&#xff0c;怎么理解&#xff0c;怎么用它。 首先接口并不是Java才有的&…

《领域特定语言》一1.5使用代码生成

1.5使用代码生成 在迄今为止的讨论中&#xff0c;要处理DSL&#xff0c;组装“语义模型”&#xff08;第11章&#xff09;&#xff0c;然后执行语义模型&#xff0c;提供我们希望从控制器得到的行为。在语言圈子里&#xff0c;这种方式称为解释&#xff08;interpretation&…

SVG 基础图形

SVG 基础图形 SVG包含了以下的基础图形元素&#xff1a; 矩形&#xff08;包括可选的圆角&#xff09;&#xff0c;使用<rect>元素创建圆形&#xff0c;使用<circle>元素创建椭圆形&#xff0c;使用<ellipse>元素创建直线&#xff0c;使用<line>元素创…

枣庄三中高考2021成绩查询,2021枣庄中考成绩查询系统入口

2021枣庄中考成绩查询系统入口2021-05-20 19:11:35文/王佳慧2021年&#xff0c;枣庄的中考时间快到了&#xff0c;本文分享了枣庄中考成绩查询入口&#xff0c;系统开通后考生可登陆查询成绩。枣庄中考成绩查询入口志愿填报须知1.录取标准&#xff1a;提前批、第一批、第三批学…

移动端”宴席知多少

转载(http://adt.aicai.com/index.php/archives/179/) 瞎折腾移动端的项目已经很长一段时间了&#xff0c;并不像其它企业一样&#xff0c;可以有项目组去完成&#xff0c;基本都是一个人瞎尝试&#xff0c;时而web&#xff0c;时而web app。恍恍惚惚过了这段岁月&#xff0c;也…

快速的取整方法(~~)

为什么80%的码农都做不了架构师&#xff1f;>>> 最近看一篇js装逼小技巧————双波浪号的妙用(将内容转化为数字,或者小数取整)&#xff0c;但是本身我的JavaScript水平比较低对其底层操作和其使用范围不甚了解&#xff1b;通过翻阅资料现进行简单的整理。 ###装…

git log友好显示

查看commit 提交日志 $ git log $git log --prettyoneline $git reflog 显示所有提交记录&#xff0c;包括已经回退的提交&#xff0c;如图&#xff1a;提交了abc 和 bb 然后回退到 abc   $git log 只显示abc提交 可以使用 $git reset --hard commit号 回退到bb git reflog…