zoukankan      html  css  js  c++  java
  • Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

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

    通过前面的学习,你可能大致了解了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,核心代码如下:

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

    (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

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

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

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

    这里写图片描述

    (2)任务列表页面

    这里写图片描述
    (3)新增页面(编辑页面和此类似)

    这里写图片描述
    (4)Eclipse控制台打印的信息

    这里写图片描述

    四:源码

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

    转自http://www.cnblogs.com/aflyun/p/6515849.html

  • 相关阅读:
    解决ListView异步加载数据之后不能点击的问题
    android点击实现图片放大缩小 java技术博客
    关于 数据文件自增长 的一点理解
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Linux 超级用户的权利
    RAC 实例 迁移到 单实例 使用导出导入
    Shell 基本语法
    Linux 开机引导与关机过程
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Oracle RAC + Data Guard 环境搭建
  • 原文地址:https://www.cnblogs.com/shizhijie/p/8251507.html
Copyright © 2011-2022 走看看