=================================================java
人工智能教程。零基礎!通俗易懂!風趣幽默!你們能夠看看是否對本身有幫助!
點擊查看高清無碼教程mysql
=================================================git
當任什麼時候候覺你得難受了,其實你的大腦是在進化,當任什麼時候候你以爲輕鬆,其實都在使用之前的壞習慣。github
經過前面的學習,你可能大體瞭解了Quartz,本篇博文爲你打開學習SSMM+Quartz的旅程!歡迎上車,開始美好的旅程!
本篇是在SSM框架——Spring+SpringMVC+Mybatis的搭建教程這篇爲基礎上進行的,若是不瞭解SSM搭建請先點擊閃現到查看詳情:閃現web
一:環境介紹spring
工具:Eclipse+ Mysql
框架:Spring+SpringMVC+Mybatis
日誌:logback
構建工具:Maven
單元測試:Junit4
Quartz版本:2.2.1sql
二:SSMM+Quartz集成詳解
1:概述
在以前SSM框架的基礎集合Quartz寫一個簡單的Web項目,實現Quartz的動態添加,修改和刪除功能!(這裏只是對Cron類型的Trigger進行操做)數據庫
2:項目結構
apache
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:待優化地方
三:運行效果介紹
有兩種方式啓動本實例項目:
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集成 源碼
備註: 因爲本人能力有限,文中如有錯誤之處,歡迎指正。
謝謝你的閱讀,若是您以爲這篇博文對你有幫助,請點贊或者喜歡,讓更多的人看到!祝你天天開心愉快!