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集成 源码
阅读全文
0 0
原创粉丝点击