Job管理器是基於數據庫管理Quartz Job任務,更方便管理Job的生命週期 java
項目下載 URL:http://pan.baidu.com/s/1ntAH4Zf 密碼:j8za mysql
Job管理器主要特色:
-
配置applicationContext.xml spring
-
配置jdbcSource.xml鏈接池 sql
-
配置jdbc.properties屬性 數據庫
-
配置job.xml app
-
配置job.properties ide
-
啓動任務掃描器 this
-
加載job類 url
配置applicationContext.xml spa
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:spring-beans.xsd"> <!-- 加載做業調度 --> <import resource="job.xml" /> <!-- 加載初始化參數 --> <import resource="jdbcSource.xml" /> </beans>
配置jdbcSource.xml鏈接池
<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:spring-beans.xsd"> <!-- 加載屬性文件 --> <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value> file:${JDBC_CONFIG}/jdbc/jdbc.properties </value> </list> </property> </bean> <!--配置數據源 --> <bean id="saveOrace" class="com.venustech.dao.PooledDataSource"> <!-- 指定鏈接數據庫的URL --> <property name="url" value="${zjaudit.url}" /> <!-- 指定鏈接數據庫的驅動 --> <property name="driverClassName" value="${zjaudit.driverClassName}" /> <!-- 指定鏈接數據庫的用戶名 --> <property name="username" value="${zjaudit.username}" /> <!-- 指定鏈接數據庫的密碼 --> <property name="password" value="${zjaudit.password}" /> <!-- 指定鏈接數據庫的最大線程 --> <property name="maxActive" value="${zjaudit.maxActive}" /> <!-- 指定鏈接數據庫的初始化值 --> <property name="initialSize" value="${zjaudit.initialSize}" /> <!-- 最大空閒數 --> <property name="maxIdle" value="${zjaudit.maxIdle}" /> <!-- 指定鏈接數據庫的最大等待時間 --> <property name="maxWait" value="${zjaudit.maxWait}" /> <!-- 指定鏈接數據庫的回收超時鏈接的時長 --> <property name="removeAbandonedTimeout" value="${zjaudit.removeAbandonedTimeout}" /> <!--檢查空閒鏈接的時間間隔 --> <property name="timeBetweenEvictionRunsMillis" value="${zjaudit.timeBetweenEvictionRunsMillis}" /> <!--逐出空閒時間 毫秒 --> <property name="minEvictableIdleTimeMillis" value="${zjaudit.minEvictableIdleTimeMillis}" /> </bean> <!--分頁組件 --> <bean id="pageModel" class="com.venustech.data.PageModel"> <property name="pageSize" value="10" /> <property name="pageIndex" value="1" /> <property name="pageSizeName" value="pageSize" /> <property name="pageIndexName" value="currentPage" /> <property name="pageCountName" value="totalRecords" /> <property name="pageTotalPage" value="totalPage" /> </bean> <bean id="sqlSessionFactory" class="com.venustech.sql.SqlSessionFactory"> <property name="dataSource" ref="saveOrace" /> <property name="type" value="5" /> <property name="pageModel" ref="pageModel" /> </bean> </beans>
配置jdbc.properties屬性
#save oracele zjaudit.url=jdbc:mysql://192.168.0.200/test?characterEncoding=utf8 zjaudit.driverClassName=com.mysql.jdbc.Driver zjaudit.username=root zjaudit.password=admin zjaudit.maxActive=15 zjaudit.initialSize=5 zjaudit.maxIdle=5 zjaudit.maxWait=172800000 zjaudit.removeAbandonedTimeout=600 zjaudit.timeBetweenEvictionRunsMillis=600000 zjaudit.minEvictableIdleTimeMillis=900000
配置job.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:spring-beans.xsd"> <!--自動掃描JOB --> <bean id="quartzManageFactory" class="com.venustech.quartz.QuartzManageImpl"> <property name="jobPath"> <value>${QUARTZ_HOME}job.properties</value> </property> </bean> <!-- 不要改變 調度 loadingServiceImpl --> <bean id="loadingServiceImpl" class="com.venustech.quartz.service.impl.LoadingServiceImpl"> <property name="queryTask"> <value> select * from TASK_JOB_CONFIG_COLLECTOR where JOB_STATUS =0 and JOB_IP = :JOB_IP </value> </property> <property name="indexPrefix" value="=[" /> <property name="indexSuffix" value="]" /> <property name="quartzManageFactory" ref="quartzManageFactory" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="jobTask" value="com.job.Startjob" /> </bean> </beans>
配置job.properties
#JOB 調度信息 org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false org.quartz.scheduler.wrapJobExecutionInUserTransaction = false org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool #最大建立50個JOB任務同時執行 org.quartz.threadPool.threadCount = 50 #線程優先級 org.quartz.threadPool.threadPriority = 5 org.quartz.jobStore.misfireThreshold = 60000 #基於內存的調度 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
設置環境變量
export QUARTZ_HOME=\javaEE\javaSrc\quartzJob\config
啓動掃描器
package com.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.venustech.cache.bean.BeanFactory; import com.venustech.quartz.service.LoadingService; import com.venustech.quartz.service.impl.LoadingServiceImpl; public class Startjob implements Job { Logger logger = LoggerFactory.getLogger(this.getClass()); public final static String PATH_HOME = System.getenv().get("QUARTZ_HOME") + "/"; public final static String PATH_APP = PATH_HOME + "applicationContext.xml"; public final static String JOB_BEAN = "loadingServiceImpl"; private static LoadingService loadingService; public static LoadingService getLoadingService() { if (loadingService == null) { return (LoadingServiceImpl) BeanFactory.getBean(PATH_APP, JOB_BEAN); } return loadingService; } public static void main(String[] args) { try { Startjob.getLoadingService().init(); } catch (Exception e) { e.printStackTrace(); } } @Override public void execute(JobExecutionContext context) throws JobExecutionException { LoadingService loadingService = getLoadingService(); try { loadingService.getUpdateJob(loadingService.getQuartzManage()); } catch (Exception e) { logger.error("exec jobTask exception:" + e); } } }
加入DB管理器
/* SQLyog Ultimate v11.24 (32 bit) MySQL - 5.1.73 ********************************************************************* */ /*!40101 SET NAMES utf8 */; create table `TASK_JOB_CONFIG_COLLECTOR` ( `JOB_ID` varchar (765), `JOB_GROUP` varchar (765), `JOB_TIME` varchar (765), `JOB_CLASS` varchar (765), `JOB_IP` varchar (765), `JOB_STATUS` int (11), `JOB_PARAMETERS` varchar (765), `JOB_START` varchar (765), `JOB_END` varchar (765) ); insert into `TASK_JOB_CONFIG_COLLECTOR` (`JOB_ID`, `JOB_GROUP`, `JOB_TIME`, `JOB_CLASS`, `JOB_IP`, `JOB_STATUS`, `JOB_PARAMETERS`, `JOB_START`, `JOB_END`) values('47','JOB_TASK','0/5 * * * * ?','test.B','192.168.174.1','0','id=[111111],type=[111]','2014-07-30 18:20:00','2020-01-01 00:00:00'); insert into `TASK_JOB_CONFIG_COLLECTOR` (`JOB_ID`, `JOB_GROUP`, `JOB_TIME`, `JOB_CLASS`, `JOB_IP`, `JOB_STATUS`, `JOB_PARAMETERS`, `JOB_START`, `JOB_END`) values('11','JOB_TASK','0/5 * * * * ?','test.Startjob','192.168.174.1','0','','2014-06-30 18:20:00','2020-01-01 00:00:00'); insert into `TASK_JOB_CONFIG_COLLECTOR` (`JOB_ID`, `JOB_GROUP`, `JOB_TIME`, `JOB_CLASS`, `JOB_IP`, `JOB_STATUS`, `JOB_PARAMETERS`, `JOB_START`, `JOB_END`) values('112','JOB_TASK','0/5 * * * * ?','test.C','192.168.174.1','0','id=[22222],type=[333332]','2015-07-01 00:00:00','2020-01-01 00:00:00');
加入Job調度類
package com.job; import java.util.Iterator; import java.util.Map; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.venustech.data.DataMap; import com.venustech.data.IData; public class A implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap map = context.getJobDetail().getJobDataMap(); @SuppressWarnings("unchecked") Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); IData<String, Object> jobParameters = new DataMap<String, Object>(); // 將參數存儲到data中 while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); jobParameters.put(entry.getKey(), entry.getValue()); } System.out.println(jobParameters); } }