(轉) Quartz學習——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成詳解(四)

http://blog.csdn.net/u010648555/article/details/60767633

?

當任何時候覺你得難受了,其實你的大腦是在進化,當任何時候你覺得輕松,其實都在使用以前的壞習慣。

通過前面的學習,你可能大致了解了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,核心代碼如下:

    @Overridepublic 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
  • 1
  • 1

配置好之后運行啟動不報錯就ok!

最后打開瀏覽器,輸入?http://localhost:8080/ssm_quratz

3:運行結果圖?
(1)登錄頁面

(2)任務列表頁面

?
(3)新增頁面(編輯頁面和此類似)

?
(4)Eclipse控制臺打印的信息

四:源碼

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257896.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257896.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257896.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

被流氓360設置瀏覽器主頁的解決辦法(如果你也遇到了跟我一樣的問題,不妨看一下是不是這個原因)...

最近電腦罷工&#xff0c;重裝了系統&#xff1b;很多常用軟件都不得不重新安裝&#xff0c;其實這都不是事兒&#xff0c;現在基本上都是百兆光纖了&#xff0c;下載安裝都很順溜。 瀏覽器也在安裝之列&#xff0c;因為搞開發所以谷歌火狐瀏覽器都是必裝的&#xff1b;平時基本…

BZOJ1834 [ZJOI2010]network 網絡擴容

網絡流訓練好題。。。但是要給差評&#xff01;蒟蒻表示這就是板子題&#xff0c;然后做了半個小時T T 先跑一邊最大流&#xff0c;得到第一問答案ans。 第二問&#xff1a;原先的邊不動&#xff0c;費用為0。 然后對每條邊在上面再加一條邊&#xff0c;流量為inf&#xff0c;費…

android 更新平臺,Android更新平臺架構方案

這篇文章是去年寫的&#xff0c;我們的兩款app一直這使用umeng的更新服務&#xff0c;但是16年umeng開始放棄更新服務&#xff0c;考慮到切換到其他更新平臺也會面臨這樣的問題&#xff0c;我開始著手自己搭建一個更新平臺。整體方案包含前后端&#xff0c;客戶端代碼封裝成jar…

setSignVisible的修改

store傳入accountReducer 1.從cookie中獲取id,avatar,nickname.2.createStore(reducer, initState)傳入reducer,可以在頁面中state.accountReducer.current_account獲取 const middleware routerMiddleware(browserHistory); let initState {};if(Cookie.hasItem("id&qu…

DGbroker故障切換示例

1.主庫故障 SQL> startup ORACLE instance started.Total System Global Area 1068937216 bytes Fixed Size 2260088 bytes Variable Size 910164872 bytes Database Buffers 150994944 bytes Redo Buffers 5517312 bytes ORA-00205: e…

html 自動觸發 事件,js自動觸發事件自定義事件

在有些情況下&#xff0c;我們需要程序邏輯自動觸發元素的事件&#xff0c;例如js提供了click()&#xff0c; form提供了reset(),submit()等方法&#xff01;在jquery中提供了trigger()方法幫助我們自動觸發事件&#xff0c;原理是什么呢&#xff1f;接下來讓我們一探究竟&…

Storm編程入門API系列之Storm的可靠性的ACK消息確認機制

概念&#xff0c;見博客 Storm概念學習系列之storm的可靠性 什么業務場景需要storm可靠性的ACK確認機制&#xff1f; 答&#xff1a;想要保住數據不丟&#xff0c;或者保住數據總是被處理。即若沒被處理的&#xff0c;得讓我們知道。 public void nextTuple() {num;System.out.…

關于 php mysql pdo cannot find driver 解決方案

1、下載 文件 或者 進入 在PHP源碼包中進入ext/pdo_mysql http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2、解壓文件tar zxvf PDO_MYSQL-1.0.2.tgz 3、配置和編譯文件cd PDO_MYSQL-1.0.2/usr/local/php/bin/phpize./configure –with-php-config/usr/local/php/bin/php-config…

iOS網絡編程開發-數據加密

iOS網絡編程開發-數據加密 一、簡單說明 1.說明 在開發應用的時候&#xff0c;數據的安全性至關重要&#xff0c;而僅僅用POST請求提交用戶的隱私數據&#xff0c;還是不能完全解決安全問題。 如&#xff1a;可以利用軟件&#xff08;比如Charles&#xff09;設置代理服務器&am…

Codeforces 821C - Okabe and Boxes

821C - Okabe and Boxes 思路&#xff1a;模擬。因為只需要比較棧頂和當前要刪除的值就可以了&#xff0c;所以如果棧頂和當前要刪除的值不同時&#xff0c;棧就可以清空了(因為下一次的棧頂不可能出現在前面那些值中)。 代碼&#xff1a; #include<bits/stdc.h> using n…

Java中forEach, 用來遍歷數組

這里的for是Java中forEach, 用來遍歷數組的。for(int i : d) 就是遍歷int型數組d的 每一次訪問數組d的時候讀取的數據放入int型的i中。和for(int i0;i<d.length();i)是一樣的&#xff0c;但是forEach的可用場合較多。public class e1 {public static void main(String[] …

HDU -2546飯卡(01背包+貪心)

這道題有個小小的坎&#xff0c;就是低于5塊不能選&#xff0c;大于5塊&#xff0c;可以任意選&#xff0c;所以就在初始條件判斷一下剩余錢數&#xff0c;然后如果大于5的話&#xff0c;這時候就要用到貪心的思想&#xff0c;只要大于等于5&#xff0c;先找最大的那個&#xf…

圖片向上滾動字幕代碼html,如何通過制作滾動字幕的軟件實現這種片尾的向上滾動字幕效果...

如何制作滾動字幕 特殊滾動類字幕制作 向上向下向左向右滾動字幕制作效果 含拖動和消失全程 真是酷B了爽呆了&#xff0c;趕快學習吧&#xff01;電影、連續劇等影視作品片尾&#xff0c;都會在播放片尾曲時&#xff0c;出現向上滾動的字幕&#xff0c;顯示演員表、導演、編劇等…

【圖片服務器】搭建Nginx圖片服務器

一、安裝Nginx 二、安裝vsftpd 三、開始搭建Nginx圖片服務器 1、效果 例如&#xff1a;圖片通過ftp服務上傳到/home/ftpuser/www/images目錄下&#xff0c;我想通過訪問Nginx服務器來訪問ftp目錄下的圖片文件&#xff0c;該url為http://192.168.128.128/images/xxx.jpg。即使用…

JavaScript數組去重

1、數組去重&#xff1b; Array類型并沒有提供去重復的方法&#xff0c;如果要把數組的重復元素干掉&#xff0c;那得自己想辦法&#xff1a; 方法一&#xff1a;利用indexOf方法&#xff1b; var aa[1,3,5,4,3,3,1,4] function arr(arr) {var result[]for(var i0; i<arr.le…

html怎么讓方塊自動旋轉,如何使用純CSS實現一個圓環旋轉錯覺的動畫效果(附源碼)...

本篇文章給大家帶來的內容是關于如何使用純CSS實現一個圓環旋轉錯覺的動畫效果&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。效果預覽源代碼下載https://github.com/comehope/front-end-daily-challenges代碼解讀定義 dom&…

同志亦凡人第五季/全集BQueer As Folk 5迅雷下載

同志亦凡人 第五季 Queer as Folk Season 5 (2005) 本季看點&#xff1a;這是一群生活在匹茲堡男人和男人&#xff0c;女人和女人的故事。在他們的王國里有各色人物。王國的國王Brian&#xff08;葛爾?哈羅德 Gale Harold 飾&#xff09;&#xff0c;只追求性不問愛&#xff1…

2016,請不要在公司混日子!

1、無論為誰打工&#xff0c;要為自己學東西&#xff0c;客觀上為公司創造價值。 我自己當年&#xff0c;無論我在方正給國內企業工作&#xff0c;還是我在雅虎給外國人工作&#xff0c;我都跟別人最大的不一樣&#xff0c;我從來不覺得我在給他們打工&#xff0c;我真的可能是…

數據庫作業[定時執行任務]的創建

--每月執行的作業 exec p_createjob jobnamemm,sqlselect * from syscolumns,freqtypemonth --每周執行的作業 exec p_createjob jobnameww,sqlselect * from syscolumns,freqtypeweek --每日執行的作業 exec p_createjob jobnamea,sqlselect * from syscolumns --每日執行的作…

《算法之道》精華 經典算法部分

《算法之道》精華 經典算法部分 本書作者鄒恒明&#xff0c;作者另有一本書《數據結構之弦》&#xff0c;以及《操作系統之哲學原理》都是非常好的書這本書能夠算得上是深入淺出&#xff0c;文筆非常好。作者加入了非常多自己的思考本文包含經典算法部分第十章 排序與次序 插入…