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集成 源码

    备注: 由于本人能力有限,文中若有错误之处,欢迎指正。


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


    Java编程技术乐园:一个分享编程知识的公众号。跟着老司机一起学习干货技术知识,每天进步一点点,让小的积累,带来大的改变!

    扫描关注,后台回复【秘籍】,获取珍藏干货! 99.9%的伙伴都很喜欢

    image.png | center| 747x519

    © 每天都在变得更好的阿飞云
  • 相关阅读:
    HDU 1698 Just a Hook(线段树区间替换)
    NBOJv2 1034 Salary Inequity(DFS序+线段树区间更新区间(最值)查询)
    NBOJv2 1004 蛤玮打扫教室(线段树区间更新区间最值查询)
    NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)
    POJ 3468 A Simple Problem with Integers(线段树区间更新区间查询)
    HDU 1754 I Hate It(线段树单点更新区间最值查询)
    HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)
    GDUT——1169: Krito的讨伐(优先队列BFS)
    HDU——2444The Accomodation of Students(BFS判二分图+最大匹配裸题)
    HDU——1045Fire Net(最大匹配)
  • 原文地址:https://www.cnblogs.com/aflyun/p/6515849.html
Copyright © 2011-2022 走看看