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

=================================================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:待優化地方

  • 界面的美觀性
  • 能夠添加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

© 天天都在變得更好的阿飛雲
相關文章
相關標籤/搜索