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%的伙伴都很喜欢
Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)的更多相关文章
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)
		通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ... 
- (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
		http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ... 
- 如约而至,Java 10 正式发布!   Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势  努力的孩子运气不会太差,跌宕的人生定当更加精彩  优先队列详解(转载)
		如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ... 
- SSM后台管理系统(Spring SpringMVC Mybatis Mysql EasyUI)
		非常简单的一个后台管理系统,功能不多,框架也不复杂, 源码下载(附数据库)-ssm后台管理系统框架(Spring mvc + mybatis + mysql + easyui ) 实例图片 
- Java架构学习 转(Spring+SpringMVC+MyBatis+easyUI)
		Spring+SpringMVC+MyBatis+easyUI : http://www.cnblogs.com/han-1034683568/p/6730869.html 
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
		作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ... 
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
		一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ... 
- 带你搭建一个简单的mybatis项目:IDEA+spring+springMVC+mybatis+Mysql
		最近小编有点闲,突发奇想想重温一下mybatis,然后在脑海中搜索了一下,纳尼,居然不太会用了,想到这里都是泪啊!!现在我所呆的的公司使用的是springboot+hebinate,编程都是使用的JP ... 
- SSM框架整合(注解)-Spring+SpringMVC+MyBatis+MySql
		准备工作: 下载整合所需的jar包 点击此处下载 使用MyBatis Generator生成dao接口.映射文件和实体类 如何生成 搭建过程: 先来看一下项目的 目录结构 1.配置dispatcher ... 
随机推荐
- summernote使用心得
			今日因项目需要所以使用了很有名气的富文本编辑器summernote,分享使用方法如下!填了一点坑,提供给需要的朋友借鉴! 直接转入我的前端网 地址: http://www.qdfuns.com/not ... 
- Servlet工作原理分析
			最近在看<Java Web技术内幕>的Servlet工作原理,有点深奥和难以理解,于是乎,想通过一个简单的Demo将书上的思路理一遍,对Servlet有个更透彻更深的了解. Servlet ... 
- redis 介绍和常用命令
			redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ... 
- WP开发图片保存到独立存储并从独立存储中读取
			需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ... 
- SoapUI中读取法文字符
			最近测试中,使用SoapUI时需要读取excel中的法文数据作为参数,groovy script中使用的是jxl进行excel的读取, 开始时一直显示乱码,而后在script中添加如下wookbook ... 
- 深度学习框架-caffe安装-Mac OSX 10.12
			p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ... 
- C#格式符
			在输出字符串时,使用格式说明 使字符串显示适当的格式,比如:货币格式,或者科学计数法.百分比等. 以下是格式化的数字字符串 格式. {index, alignment: format} 例如: ; ... 
- SQL菜鸟学习札记(二)
			五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ... 
- 三分钟读懂TT猫分布式、微服务和集群之路
			针对入门新手的普及,有过大型网站技术架构牛人路过,别耽误浪费了时间,阅读之前,请确保有一定的网络基础,熟练使用Linux,浏览大概需要3-5分钟的时间,结尾有彩蛋. 目录 分布式 微服务 负载均衡集群 ... 
- Selenium常规操作---基于python
			from selenium import webdriver 1. 打开浏览器 driver=webdriver.Firefox() #火狐浏览器 driver=webdriver.Ie() #打 ... 
