作一个积极的人java
编码、改bug、提高本身mysql
我有一个乐园,面向编程,春暖花开!git
=================================================github
对人工智能感兴趣的伙伴,分享一个我朋友的人工智能教程。零基础!通俗易懂!风趣幽默!你们能够看看是否对本身有帮助,点击这里查看教程。web
=================================================spring
当任什么时候候觉你得难受了,其实你的大脑是在进化,当任什么时候候你以为轻松,其实都在使用之前的坏习惯。sql
经过前面的学习,你可能大体了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程!
本篇是在SSM框架——Spring+SpringMVC+Mybatis的搭建教程这篇为基础上进行的,若是不了解SSM搭建请先点击阅读!数据库
工具:Eclipse+ Mysql
框架:Spring+SpringMVC+Mybatis
日志:logback
构建工具:Maven
单元测试:Junit4
Quartz版本:2.2.1apache
在以前SSM框架的基础集合Quartz写一个简单的Web项目,实现Quartz的动态添加,修改和删除功能!(这里只是对Cron类型的Trigger进行操做)编程
在项目中找到初始化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
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>
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
添加过滤器拦截请求,若用户没有登陆,则跳转到登陆页面!
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>
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封装好的接口!
主要的实现代码就不在这里展现!如需查看请看源码!
(1):UserController
处理一些用户的请求操做!
(2):QuartzController
处理Quartz的请求操做!
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: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
运行结果图
第一 :登陆页面
第二:任务列表页面
第三:新增页面(编辑页面和此相似)
第四:Eclipse控制台打印的信息
从前面的系列学习过来,那本文就是一个简单的实战,根据实际的项目和一些简单的案例进行讲解,Quartz掌握到这里,基本上企业级开发也可以应付了,后续持续学习,精进Quartz的源码!
源码:SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成 源码
1.精进Quartz——Quartz大体介绍(一)
2.精进Quartz——Quartz简单入门Demo(二)
3.精进Quartz——Spring和Quartz集成详解
4.精进Quartz——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
5.精进Quartz源码——JobStore保存JonDetail和Trigger源码分析(一)
6.精进Quartz源码——scheduler.start()启动源码分析(二)
7.精进Quartz源码——QuartzSchedulerThread.run() 源码分析(三)
8.精进Quartz源码——Quartz调度器的Misfire处理规则(四)
谢谢你的阅读,若是您以为这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你天天开心愉快!
无论作什么,只要坚持下去就会看到不同!在路上,不卑不亢!
博客首页 : http://blog.csdn.net/u010648555
愿你我在人生的路上能都变成最好的本身,可以成为一个独挡一面的人
© 天天都在变得更好的阿飞云