MVC+Mybatis+Mysql)和Quartz集成详解(四)

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

欢迎关注我的公众号: Java编程技术乐园。分享技术,一起精进Quartz!

做一个积极的人

编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

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

通过前面的学习,你可能大致了解了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、项目结构

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

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、配置文件介绍

4.1 在ApplicationContext.xml中添加下面的配置:

<bean>
<property>
<property>
<property>
/<bean>
精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

4.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、关键代码简单介绍

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

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

5.2BAO和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封装好的接口!

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

5.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>
<port>8080/<port>
<maxidletime>60000/<maxidletime>
/<connector>
/<connectors>
/<configuration>
/<plugin>

在Eclipse运行步骤如在截图:

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

配置的参数

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

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

运行结果图 第一 :登录页面

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

第二:任务列表页面

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

第四:Eclipse控制台打印的信息

精进Quartz—Spring/MVC+Mybatis+Mysql)和Quartz集成详解(四)

四、总结和源码

从前面的系列学习过来,那本文就是一个简单的实战,根据实际的项目和一些简单的案例进行讲解,Quartz掌握到这里,基本上企业级开发也能够应付了,后续持续学习,精进Quartz的源码!

如需要源码:SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成

可以关注公众号进行后台留言可以获取!


谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!


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

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人

© 每天都在变得更好的阿飞云


分享到:


相關文章: