日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring4.2+quartz2.2集群

發(fā)布時(shí)間:2025/3/17 javascript 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring4.2+quartz2.2集群 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

不了解定時(shí)器概念的朋友們可以參考:

基于 Quartz 開發(fā)企業(yè)級(jí)任務(wù)調(diào)度應(yīng)用

?

1、maven創(chuàng)建工程


2、導(dǎo)入依賴 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.test</groupId><artifactId>quartz-test</artifactId><version>1.0.0</version><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><junit.version>4.12</junit.version><spring.version>4.2.1.RELEASE</spring.version><mysql.version>5.1.36</mysql.version><quartz.version>2.2.3</quartz.version></properties><dependencies><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><!-- quartz --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>${quartz.version}</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>${quartz.version}</version></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.19</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><build><finalName>quartz-test</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><!-- maven-assembly-plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>

3、配置quartz.properties

??? #==============================================================???#Configure Main Scheduler Properties???#==============================================================????org.quartz.scheduler.instanceName = mapScheduler?org.quartz.scheduler.instanceId = AUTO?#==============================================================???#Configure JobStore???#==============================================================??org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX?org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate?org.quartz.jobStore.tablePrefix = QRTZ_?org.quartz.jobStore.isClustered = true?org.quartz.jobStore.clusterCheckinInterval = 20000???org.quartz.jobStore.maxMisfiresToHandleAtATime = 1?org.quartz.jobStore.misfireThreshold = 120000?org.quartz.jobStore.txIsolationLevelSerializable = true?org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE?#==============================================================? ??#Configure ThreadPool???#==============================================================??org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool?org.quartz.threadPool.threadCount = 10?org.quartz.threadPool.threadPriority = 5?org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true?#==============================================================?#Skip Check Update?#update:true?#not update:false?#==============================================================?org.quartz.scheduler.skipUpdateCheck = true??#============================================================================????# Configure Plugins?????#============================================================================???????org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin????org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin?org.quartz.plugin.shutdownhook.cleanShutdown = true?

4、配置 db.properties

driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE username=root quartz.password=123456

5、配置 applicationContext.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" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beansclasspath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsdhttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contextclasspath:/org/springframework/context/config/spring-context-3.0.xsdhttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsd"><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:db_server.properties</value></property></bean><!-- 數(shù)據(jù)源定義,使用 druid 連接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${quartz.password}" /><property name="maxActive" value="1000" /><property name="initialSize" value="30" /><property name="maxWait" value="60000" /><property name="timeBetweenEvictionRunsMillis" value="60000" /><property name="minEvictableIdleTimeMillis" value="300000" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 開啟Druid的監(jiān)控統(tǒng)計(jì)功能 --><property name="filters" value="stat" /></bean></beans>

6、配置 applicationContext-quartz.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" xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- ********************1、配置處理日志任務(wù) bean******************** --><bean name="analysisScheduleTask-bean" class="com.test.quartz.AnalysisScheduleTask"></bean><!-- ********************2、動(dòng)態(tài)創(chuàng)建日志記錄表 jobdetail******************** --><bean id="createTableTask-jobdetail"class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><!-- durability 表示任務(wù)完成之后是否依然保留到數(shù)據(jù)庫(kù),默認(rèn)false --><property name="durability" value="true" /><property name="requestsRecovery" value="true" /><property name="jobClass"><!-- MethodInvokingJobDetailFactoryBean 類中的 methodInvoking 方法,是不支持序列化的,因此在把QUARTZ 的 TASK 序列化進(jìn)入數(shù)據(jù)庫(kù)時(shí)就會(huì)拋錯(cuò)。 所以我們要自己實(shí)現(xiàn)MethodInvokingJobDetailFactoryBean的功能,這里用MyDetailQuartzJobBean 替換。 --><value>com.test.quartz.MyDetailQuartzJobBean</value></property><property name="jobDataAsMap"><map><!-- 關(guān)聯(lián)bean --><entry key="targetObject" value="analysisScheduleTask-bean" /><!-- 方法名 --><entry key="targetMethod" value="createTableTask" /></map></property><property name="description" value="創(chuàng)建表信息任務(wù)" /></bean><bean id="secheduleTask-jobdetail"class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><!-- durability 表示任務(wù)完成之后是否依然保留到數(shù)據(jù)庫(kù),默認(rèn)false --><property name="durability" value="true" /><property name="requestsRecovery" value="true" /><property name="jobClass"><!-- MethodInvokingJobDetailFactoryBean 類中的 methodInvoking 方法,是不支持序列化的,因此在把QUARTZ 的 TASK 序列化進(jìn)入數(shù)據(jù)庫(kù)時(shí)就會(huì)拋錯(cuò)。 所以我們要自己實(shí)現(xiàn)MethodInvokingJobDetailFactoryBean的功能,這里用MyDetailQuartzJobBean 替換。 --><value>com.test.quartz.MyDetailQuartzJobBean</value></property><property name="jobDataAsMap"><map><!-- 關(guān)聯(lián)bean --><entry key="targetObject" value="analysisScheduleTask-bean" /><!-- 方法名 --><entry key="targetMethod" value="secheduleTask" /></map></property><property name="description" value="調(diào)度任務(wù)棧" /></bean><!-- ********************3、配置觸發(fā)器時(shí)間******************** --><bean id="createTableTask-trigger"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- 關(guān)聯(lián)日志 --><property name="jobDetail" ref="createTableTask-jobdetail" /><!-- 時(shí)間配置 --><property name="cronExpression" value="0/1 * * * * ?" /><!-- 描述信息 --><property name="description" value="創(chuàng)建表信息" /></bean><bean id="secheduleTask-trigger"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- 關(guān)聯(lián)日志 --><property name="jobDetail" ref="secheduleTask-jobdetail" /><!-- 時(shí)間配置 --><property name="cronExpression" value="0/1 * * * * ?" /><!-- 描述信息 --><property name="description" value="調(diào)度任務(wù)棧" /></bean><!-- ********************4、注冊(cè)調(diào)度任務(wù)******************** --><bean id="mapScheduler" lazy-init="false" autowire="no"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"destroy-method="destroy"><property name="dataSource"><ref bean="dataSource" /></property><!--可選,QuartzScheduler 啟動(dòng)時(shí)更新己存在的Job,這樣就不用每次修改targetObject后刪除qrtz_job_details表對(duì)應(yīng)記錄了 --><property name="overwriteExistingJobs" value="true" /><!--必須的,QuartzScheduler 延時(shí)啟動(dòng),應(yīng)用啟動(dòng)完后 QuartzScheduler 再啟動(dòng) --><property name="startupDelay" value="5" /><!-- 設(shè)置自動(dòng)啟動(dòng) --><property name="autoStartup" value="true" /><property name="triggers"><list><ref bean="createTableTask-trigger" /><ref bean="secheduleTask-trigger" /></list></property><property name="applicationContextSchedulerContextKey" value="applicationContext" /><property name="configLocation" value="classpath:quartz.properties" /></bean></beans>?

7、創(chuàng)建MyDetailQuartzJobBean.java

注:此步驟的原因:?quartz整合Spring注入Service時(shí)空指針異常問(wèn)題解決?

public class MyDetailQuartzJobBean extends QuartzJobBean {private String targetObject;private String targetMethod;private ApplicationContext ctx;@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {try {// LogUtils.Log("execute [" + targetObject + "] at once>>>>>>");Object otargetObject = ctx.getBean(targetObject);Method m = null;try {m = otargetObject.getClass().getMethod(targetMethod, new Class[] { JobExecutionContext.class }); // 方法中的參數(shù)是JobExecutionContext類型m.invoke(otargetObject, new Object[] { context });} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();}} catch (Exception e) {throw new JobExecutionException(e);}}public void setApplicationContext(ApplicationContext applicationContext) {this.ctx = applicationContext;}public void setTargetObject(String targetObject) {this.targetObject = targetObject;}public void setTargetMethod(String targetMethod) {this.targetMethod = targetMethod;}}

8、創(chuàng)建ScheduleTask.java

public class AnalysisScheduleTask {?/*** 調(diào)度創(chuàng)建表,方法中的參數(shù)是JobExecutionContext類型,要使MyDetailQuartzJobBean中的executeInternal方法中利用反射機(jī)制調(diào)用到相應(yīng)的方法*/?public void createTableTask(JobExecutionContext context){?System.out.println("@創(chuàng)建表..."+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));}?/*** 調(diào)度任務(wù)棧,方法中的參數(shù)是JobExecutionContext類型,要使MyDetailQuartzJobBean中的executeInternal方法中利用反射機(jī)制調(diào)用到相應(yīng)的方法*/?public void secheduleTask(JobExecutionContext context){?System.out.println("@調(diào)度任務(wù)棧..."+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));}?/*** 刪除任務(wù)棧,方法中的參數(shù)是JobExecutionContext類型,要使MyDetailQuartzJobBean中的executeInternal方法中利用反射機(jī)制調(diào)用到相應(yīng)的方法*/?public void deleteTask(JobExecutionContext context){?System.out.println("deleteTask");?}?}

9、創(chuàng)建啟動(dòng)Client.java

public class Client {private static Logger logger = LoggerFactory.getLogger(Client.class);public static void main(String[] args) {initquartz();}private static void initquartz() {ApplicationContext context = new?ClassPathXmlApplicationContext(new?String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});}}

10、導(dǎo)入quartz數(shù)據(jù)庫(kù)表

quartz 2.x和quartz1.x的數(shù)據(jù)庫(kù)表是不一樣的。要導(dǎo)入對(duì)應(yīng)版本的數(shù)據(jù)庫(kù)表

## Quartz seems to work best with the driver mm.mysql-2.0.7-bin.jar## PLEASE consider using mysql with innodb tables to avoid locking issues## In your Quartz properties file, you'll need to set# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate#DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;DROP TABLE IF EXISTS QRTZ_LOCKS;DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;DROP TABLE IF EXISTS QRTZ_TRIGGERS;DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;DROP TABLE IF EXISTS QRTZ_CALENDARS;CREATE TABLE QRTZ_JOB_DETAILS(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME? VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME?? VARCHAR(250) NOT NULL,IS_DURABLE VARCHAR(1) NOT NULL,IS_NONCONCURRENT VARCHAR(1) NOT NULL,IS_UPDATE_DATA VARCHAR(1) NOT NULL,REQUESTS_RECOVERY VARCHAR(1) NOT NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME? VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME BIGINT(13) NULL,PREV_FIRE_TIME BIGINT(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME BIGINT(13) NOT NULL,END_TIME BIGINT(13) NULL,CALENDAR_NAME VARCHAR(200) NULL,MISFIRE_INSTR SMALLINT(2) NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_SIMPLE_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT BIGINT(7) NOT NULL,REPEAT_INTERVAL BIGINT(12) NOT NULL,TIMES_TRIGGERED BIGINT(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_CRON_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(200) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_SIMPROP_TRIGGERS(?????????SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 INT NULL,INT_PROP_2 INT NULL,LONG_PROP_1 BIGINT NULL,LONG_PROP_2 BIGINT NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR(1) NULL,BOOL_PROP_2 VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_BLOB_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_CALENDARS(SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME? VARCHAR(200) NOT NULL,CALENDAR BLOB NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP? VARCHAR(200) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_FIRED_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME BIGINT(13) NOT NULL,SCHED_TIME BIGINT(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200) NULL,JOB_GROUP VARCHAR(200) NULL,IS_NONCONCURRENT VARCHAR(1) NULL,REQUESTS_RECOVERY VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_SCHEDULER_STATE(SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,LAST_CHECKIN_TIME BIGINT(13) NOT NULL,CHECKIN_INTERVAL BIGINT(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE QRTZ_LOCKS(SCHED_NAME VARCHAR(120) NOT NULL,LOCK_NAME? VARCHAR(40) NOT NULL,PRIMARY KEY (SCHED_NAME,LOCK_NAME))ENGINE=InnoDB DEFAULT CHARSET=utf8;commit;

?

?

在Spring中使用Quartz任務(wù)調(diào)度支持集群(轉(zhuǎn)載)

雖然在Quartz上有配置Quartz集群Clustering?,但是在Spring中使用Quartz任務(wù)調(diào)度并支持集群系統(tǒng)卻有些問(wèn)題,下面介紹解決辦法:

環(huán)境:(環(huán)境非常重要,注意版本號(hào))

Spring-1.2.7:spring.jar-1.2.7.jar

Quartz-1.5.2:quartz-1.5.2.jar,quartz-oracle-1.5.2.jar

Oracle10G:

org.springframework.scheduling.quartz.CronTriggerBean與Quartz版本依賴情況:
NOTE:?This convenience subclass does not work with trigger persistence?in Quartz 1.6,
due to a change in Quartz's trigger handling. Use Quartz 1.5 if you rely on trigger
persistence based on?this?class, or the standard Quartz?CronTrigger?class instead.


org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean在使用?
org.quartz.impl.jdbcjobstore.JobStoreTX的支持情況:

Note:?JobDetails created via this FactoryBean are?not?serializable and thus not suitable?

for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for?

each case where you want a persistent job to delegate to a specific service method.

?

所以,Quartz集群只支持JDBCJobStore存儲(chǔ)方式,而MethodInvokingJobDetailFactoryBean不能序列化存儲(chǔ)job數(shù)據(jù)到數(shù)據(jù)庫(kù),
所以需要手工編寫任務(wù)調(diào)度類繼承QuartzJobBean,否則報(bào)如下錯(cuò)誤:

ERROR [org.springframework.web.context.ContextLoader] Context initialization failed
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'schedulerFactoryBean' defined
in ServletContext resource [/WEB-INF/classes/tim-quartz.xml]: Invocation of init method failed;
nested exception is org.quartz.JobPersistenceException:?Couldn't store job: Unable to serialize JobDataMap for insertion
into database because the value of property 'methodInvoker' is not serializable:
org.springframework.scheduling.quartz.MethodInvoki ngJobDetailFactoryBean [See nested exception: java.io.NotSerializableException:
Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable:
org.springframework.scheduling.quartz.MethodInvoki ngJobDetailFactoryBean]

類路徑上的quartz.properties:

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

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
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

?


#============================================================================
# Configure Main Scheduler Properties??
#============================================================================

org.quartz.scheduler.instanceId = AUTO


#============================================================================
# Configure JobStore??
#============================================================================

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = SYS_

org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

#============================================================================
# Configure Datasources??
#============================================================================

#org.quartz.dataSource.myDS.jndiURL = java:comp/env/jdbc/psmis

org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@10.150.131.33:1521:psmis
org.quartz.dataSource.myDS.user = psmis
org.quartz.dataSource.myDS.password = psmis33
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual

?

創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu):在下載的包quartz-1.5.2.zip\quartz-1.5.2\docs\dbTables\tables_oracle.sql

調(diào)度類,SysScheduleManagerImpl.java:

package com.sunrise.psmis.sysmanagement.service.impl;

import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.sunrise.psmis.webapp.util.ContextUtil;

public class SysScheduleManagerImpl?extends QuartzJobBean{
?protected final Log logger = LogFactory.getLog(getClass());
?
?private String targetObject;
?private String targetMethod;
?
?protected void executeInternal(JobExecutionContext context) throws JobExecutionException{
?//??System.out.println(jobData.getData() + " 第一個(gè)已經(jīng)被執(zhí)行了!!");
??try
??{
?????????ApplicationContext?ctx =ContextUtil.getContext();

?????????Object otargetObject=ctx.getBean(targetObject);
???
???Method m=null;
???try {
????m = otargetObject.getClass().getMethod(targetMethod, new Class[] {});
????
????m.invoke(otargetObject,??new Object[]?{});
???} catch (SecurityException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???} catch (NoSuchMethodException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
?????????

??}
??catch(Exception e)
??{
???throw new JobExecutionException(e);
??}
??finally
??{
???logger.debug("end");
??}
??
?}

?public void setTargetObject(String targetObject) {
??this.targetObject = targetObject;
?}

?public void setTargetMethod(String targetMethod) {
??this.targetMethod = targetMethod;
?}

}

//ContextUtil類可以在應(yīng)用啟動(dòng)的Listener里初始化Spring的ApplicationContext,將ApplicationContext保存在static變量里

applicationContext-service.xml:

??<bean id="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
????<property name="jobClass">
?????<value>com.sunrise.psmis.sysmanagement.service.impl.SysScheduleManagerImpl</value>
????</property>
??<property name="jobDataAsMap">
????????<map>
????????????<entry key="targetObject" value="ecOwnUnstopWorksheetManager"/>
????????????<entry key="targetMethod" value="execSyncPaymeny"/>
????????</map>
??</property>???
??</bean>
?<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
?????<property name="jobDetail" ref="exampleJob" />
?????<!-- run every morning at 6 AM -->
?????<property name="cronExpression" value="0 2 * * * ?" />
?</bean>

??<bean id="seqJob" class="org.springframework.scheduling.quartz.JobDetailBean">
???<property name="jobClass">
????<value>com.sunrise.psmis.sysmanagement.service.impl.SysScheduleManagerImpl</value>
???</property>
??<property name="jobDataAsMap">
????????<map>
????????????<entry key="targetObject" value="sysIdManager"/>
????????????<entry key="targetMethod" value="callProSeqEvalute"/>
????????</map>
??</property>???
??</bean>
?
?<bean id="seqTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
?????<property name="jobDetail" ref="seqJob" />
?????<!-- run every morning at 6 AM -->
?????<property name="cronExpression" value="0 0 0,1,2 * * ?" />
?</bean>

?<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
?????<property name="triggers">
?????????<list>
?????????????<ref bean="cronTrigger" />???
?????????????<ref bean="seqTrigger"/>
?????????</list>
?????</property>
??<property name="schedulerContextAsMap">
???<map>
???<entry key="sysIdManager">
????<ref bean="sysIdManager" />
???</entry>
???<entry key="ecOwnUnstopWorksheetManager">
????<ref bean="ecOwnUnstopWorksheetManager" />
???</entry>
???</map>
??</property>
?</bean>

?

?

前輩,你這篇文章就是及時(shí)雨啊。我這幾天正在搞這個(gè)jobstore。可是現(xiàn)在遇到個(gè)問(wèn)題,放狗都搜不到什么東西。

008-10-08 15:48:09,806 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:205) - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.quartz.SchedulerFactoryBean' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerException: Registration of jobs and triggers failed: closeResultSet Caused by: org.quartz.SchedulerException: Registration of jobs and triggers failed: closeResultSet at org.springframework.scheduling.quartz.SchedulerFactoryBean.registerJobsAndTriggers(SchedulerFactoryBean.java:798)

請(qǐng)前輩指點(diǎn)一二,叩謝

?

啊,前輩,剛才那個(gè)問(wèn)題莫名其妙就沒(méi)了。現(xiàn)在是另外一個(gè)問(wèn)題,我的xml定義的contrigger是這樣的: 在applicationContext.xml里:

<?xml version="1.0" encoding="UTF-8"?> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="configLocation" value="/WEB-INF/quartz.properties"/><property name="triggers"><list><ref bean="cronTertioRespParseTrigger"/></list></property> </bean>

然后在具體模塊的xml里定義了:

<?xml version="1.0" encoding="UTF-8"?> <bean class="org.springframework.scheduling.quartz.CronTriggerBean" id="cronTertioRespParseTrigger"><property name="jobDetail"><bean class="com.foss.main.customObject.MyMethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="terRspParseCronService"/><property name="targetMethod" value="processFiles"/><!-- <property name="concurrent"><value>false</value></property> --></bean></property><property name="volatility"><value>true</value></property><property name="cronExpression"><value>0 0/5 * * * ?</value></property> </bean>

現(xiàn)在的問(wèn)題是,當(dāng)weblogic server起來(lái)后,報(bào):

2008-10-08 16:40:00,107 org.quartz.core.JobRunShell.run(JobRunShell.java:202) - Calling execute on job DEFAULT.com.foss.main.customObject.MyMethodInvokingJobD etailFactoryBean#308737 2008-10-08 16:40:00,117 org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFact oryBean.java:242) - Could not invoke method 'null' on target object [null] java.lang.IllegalStateException: prepare() must be called prior to invoke() on MethodInvoker at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:267) at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java: 224) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) at org.quartz.core.JobRunShell.run(JobRunShell.java:203) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520) 2008-10-08 16:40:00,157 org.quartz.core.JobRunShell.run(JobRunShell.java:208) - Job DEFAULT.com.foss.main.customObject.MyMethodInvokingJobDetailFactoryBean#30 8737 threw a JobExecutionException: org.quartz.JobExecutionException: Could not invoke method 'null' on target object [null] [See nested exception: java.lang.IllegalStateException: prepare() mus t be called prior to invoke() on MethodInvoker]

其中,MyMethodInvokingJobDetailFactoryBean是我wripper的MethodInvokingJobDetailFactoryBean 是不是我xml里config的job不對(duì)呢?請(qǐng)前輩指教

?

你的錯(cuò)誤報(bào):Could not invoke method 'null' on target object [null] ; 說(shuō)明的你的配置有問(wèn)題。如果你是要集群環(huán)境跑,那就不能用MethodInvokingJobDetailFactoryBean,好像你的MyMethodInvokingJobDetailFactoryBean也是繼承這個(gè)的。如果不是集群環(huán)境,那么用MethodInvokingJobDetailFactoryBean很方便。

?

如果不是集群環(huán)境參考:?

<bean id="exampleJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="ecOwnUnstopWorksheetManager" /><property name="targetMethod" value="execSyncPaymeny" /><property name="concurrent" value="false" /> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="exampleJob" /><!-- run every morning at 6 AM --><property name="cronExpression" value="0 2 * * * ?" /> </bean>

?

大俠,我是要在集群環(huán)境跑。我的目的是要在cluster的環(huán)境下,同一時(shí)間只能有一個(gè)app server 跑scheduled 好的一個(gè)job, 我做的那個(gè)MyMethodInvokingJobDetailFactoryBean的確是繼承的MethodInvokingJobDetailFactoryBean,因?yàn)镸ethodInvokingJobDetailFactoryBean不是序列化的。但是我在MyMethodInvokingJobDetailFactoryBean不知道該怎么重寫execute()。。。。。。。 剛才又去試了你給的SysScheduleManagerImpl.java,可是在做ContextUtil的遇到路徑問(wèn)題。在我的applicationContext里,有定義quartz.property的路徑: <property name="configLocation" value="WEB-INF/quartz.properties" /> 這個(gè)在weblogic parse xml file的時(shí)候是工作的。但是當(dāng)用FileSystemXmlApplicationContext(xml file list)的時(shí)候,就找不到了。我要是改成FileSystemXmlApplicationContext能找到的,weblogic parse的時(shí)候就找不到了。暈啊

?

大俠,我終于搞出來(lái)了。沒(méi)有用那個(gè)ContextUtil 而是在xml file里面加一句:

<bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="configLocation" value="WEB-INF/quartz.properties" /><property name="applicationContextSchedulerContextKey"><value>applicationContext</value></property><property name="triggers"><list>

然后在SysScheduleManagerImpl.java里:

ApplicationContext ctx = (ApplicationContext) context.getScheduler().getContext().get("applicationContext"); Object otargetObject=ctx.getBean(targetObject);

?

轉(zhuǎn)自:在Spring中使用Quartz任務(wù)調(diào)度支持集群(轉(zhuǎn)載)

參考:Spring Scheduler定時(shí)器原理分析

?

Spring Quartz動(dòng)態(tài)管理定時(shí)任務(wù)及相關(guān)問(wèn)題總結(jié)

?Spring 整合 Quartz 實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)(附demo)

轉(zhuǎn)載于:https://my.oschina.net/anxiaole/blog/1358779

總結(jié)

以上是生活随笔為你收集整理的Spring4.2+quartz2.2集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

这里只有精品视频在线观看 | 色婷婷综合久色 | 97热视频| 久久精品老司机 | 日韩欧美在线影院 | 久久久天天操 | 四虎影视成人精品国库在线观看 | www.99热精品 | 日日干天夜夜 | 中文字幕在线播出 | 在线免费观看黄色 | 丁香免费视频 | 香蕉影院在线观看 | 日韩av成人在线 | 欧美国产在线看 | 91高清免费 | 成人影视片 | 久久在线视频精品 | 亚洲视频2 | 免费日韩在线 | 国产一区二区视频在线 | 98精品国产自产在线观看 | 四虎欧美 | www.黄色小说.com | 丁香色婷 | 一级a性色生活片久久毛片波多野 | 人人草人人草 | av黄色成人 | 欧美精品视 | 欧美日韩免费看 | 99久久99久久精品免费 | 看片一区二区三区 | 日韩av影片在线观看 | 中文字幕黄网 | 亚洲午夜小视频 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 婷婷色伊人 | www看片网站| 亚洲国产福利视频 | 黄色小网站在线观看 | 免费三级a| 欧美成人亚洲成人 | 免费亚洲视频在线观看 | 国产大陆亚洲精品国产 | 日韩精品免费一区二区在线观看 | 天天射天天爽 | 欧美福利片在线观看 | 成人a级网站 | 国产精久久久久久久 | 深爱婷婷久久综合 | 国产午夜精品一区二区三区 | 91精品久久香蕉国产线看观看 | 99性视频| 超碰在线资源 | 六月婷婷网 | 欧美精品久久久久久久久久丰满 | 91日韩在线| 97精品超碰一区二区三区 | 黄色资源在线观看 | www.看片网站 | 啪啪小视频网站 | 99精品免费视频 | 天天色天天爱天天射综合 | 国产精品免费观看久久 | 看毛片网站 | 国产日韩视频在线观看 | 又黄又爽又无遮挡免费的网站 | 日韩小视频网站 | 中文字幕在线观看一区二区三区 | 丰满少妇一级片 | 日韩欧美一区二区三区黑寡妇 | 在线综合色| 国产黄网站在线观看 | 水蜜桃亚洲一二三四在线 | 亚洲一区尤物 | 久久,天天综合 | 国产色拍拍拍拍在线精品 | 麻豆小视频在线观看 | av电影免费在线看 | 高清一区二区 | 午夜视频在线观看欧美 | 97在线成人 | 成年人黄色av| 免费网站色 | 国产 一区二区三区 在线 | 亚洲综合五月天 | 国产一区二区不卡视频 | 天天干夜夜想 | 成人欧美一区二区三区在线观看 | 日韩欧美电影在线观看 | 国产精品久久久久久久午夜 | 亚欧日韩成人h片 | 中日韩三级视频 | 亚洲免费av电影 | 懂色av一区二区在线播放 | 日b视频在线观看网址 | 丁香六月在线 | 在线亚洲成人 | 久久久国际精品 | 免费av网站观看 | 最新国产中文字幕 | 亚洲一区欧美精品 | 91av在线视频播放 | 最近日韩免费视频 | 日韩在线免费看 | 国产精品黄色av | 97超碰人 | 最新久久久 | 欧美日韩在线观看一区二区三区 | 欧美欧美 | 成人av电影免费在线播放 | 精品在线免费视频 | 狠狠狠狠狠狠干 | 国产v在线观看 | 国产中文字幕视频在线观看 | 超碰人人av | 成人福利在线 | 亚洲成av人片在线观看香蕉 | 天天操天天怕 | 欧美日韩一区二区三区不卡 | 国产中文字幕视频在线观看 | 免费网站看av片 | 西西444www| www.97色.com| 三级黄色网络 | 日本护士三级少妇三级999 | 久久久久一区二区三区四区 | 人人爽人人爽人人片av免 | 成人97视频一区二区 | 久久久国产精品视频 | 91人人爽人人爽人人精88v | 欧美 激情在线 | 美女视频免费精品 | 波多野结衣电影一区 | 国外调教视频网站 | 超碰97在线人人 | 在线视频成人 | 欧美亚洲三级 | 久久99精品国产一区二区三区 | 99久久网站| 日韩大片在线观看 | 亚洲精品av中文字幕在线在线 | 99热精品久久 | 婷婷色中文字幕 | 天天操夜夜操国产精品 | 国产一级免费电影 | 久久久久草 | 久久激情五月婷婷 | 91成人在线观看喷潮 | 日韩三级视频在线看 | 91成人小视频 | 欧洲精品视频一区二区 | 成年人黄色在线观看 | 在线播放日韩av | 国产精品麻豆99久久久久久 | 黄色小说18 | 最新99热| 久操视频在线免费看 | 国产精品96久久久久久吹潮 | 日韩毛片久久久 | 国内精品视频在线播放 | 午夜精品久久久久久久99水蜜桃 | 中文国产字幕在线观看 | 久热免费 | 久久特级毛片 | 久久综合久久综合这里只有精品 | 国产日韩精品一区二区三区 | av成人免费网站 | 免费福利在线播放 | 天天操天天干天天干 | 国产小视频在线观看 | 欧美久久久一区二区三区 | av三级在线播放 | 四虎在线观看精品视频 | 久久亚洲欧美日韩精品专区 | 国产精品18久久久久久不卡孕妇 | 国产一区二区三区在线免费观看 | 伊人网av | 在线观看日韩免费视频 | 色视频在线 | 99精品在线免费观看 | 91av网址| 亚洲一级特黄 | 婷婷色狠狠 | 夜夜视频资源 | 在线播放91| 99人久久精品视频最新地址 | 国产小视频在线免费观看视频 | 国产亚洲亚洲 | 天天干天天想 | av中文字幕在线免费观看 | 狠狠狠狠干 | 欧美婷婷色 | 国产日韩欧美视频在线观看 | 久久久久久国产精品亚洲78 | 91人人澡人人爽人人精品 | 婷婷综合成人 | 成人久久18免费网站图片 | 波多野结衣久久资源 | 97在线视频免费 | 日韩欧美在线国产 | 综合色伊人 | 91香蕉视频 mp4 | 欧美国产日韩一区二区三区 | 五月婷婷国产 | 波多野结衣视频一区二区 | 欧美精品国产综合久久 | 91传媒激情理伦片 | 天海翼一区二区三区免费 | 在线日韩三级 | 久久69精品久久久久久久电影好 | 在线看片视频 | 国产精品乱码高清在线看 | 国产日韩视频在线播放 | 毛片888 | 欧美另类一二三四区 | 国产在线p | av在线网站观看 | 免费污片 | 久久久高清视频 | 精品福利视频在线 | 五月激情在线 | 91手机视频在线 | 日本黄色免费观看 | 成人精品福利 | 国产欧美综合在线观看 | 日韩中出在线 | 色网站国产精品 | 国产欧美最新羞羞视频在线观看 | 亚洲综合视频在线观看 | 99精品久久久久 | 日韩欧美xx | www日日| 亚洲视频精品 | 99精品国产aⅴ| 欧美综合在线观看 | 亚洲综合视频在线播放 | 国产精品12 | 亚洲电影影音先锋 | 日韩在线大片 | 欧美一级电影片 | 91麻豆看国产在线紧急地址 | 中文字幕在线一区二区三区 | 日韩电影中文,亚洲精品乱码 | 国产色拍拍拍拍在线精品 | 丁香婷婷在线观看 | 不卡的一区二区三区 | 国产va饥渴难耐女保洁员在线观看 | 国精产品满18岁在线 | 97免费在线观看 | 婷婷色综 | 国产一级不卡毛片 | 99精品免费久久久久久久久日本 | 四虎国产精品永久在线国在线 | 久久草在线精品 | 粉嫩av一区二区三区四区五区 | 亚洲在线视频免费观看 | 精品久久久久国产 | 国产精品久久久久aaaa | 国内揄拍国内精品 | 天干啦夜天干天干在线线 | 婷婷丁香七月 | 久久亚洲影院 | 综合久久久久久久 | 少妇搡bbbb搡bbb搡69 | 黄色软件大全网站 | 亚洲黄色区 | 在线国产一区二区 | 欧美永久视频 | 久久天堂亚洲 | 久久国产精品99久久久久 | av黄色大片 | 亚洲国产一区二区精品专区 | 丝袜+亚洲+另类+欧美+变态 | 婷婷六月综合亚洲 | 日本一区二区三区免费观看 | 在线观看国产中文字幕 | 美女久久久久久久久久久 | 色视频网站在线观看一=区 a视频免费在线观看 | 天天操夜夜拍 | 美女网站色 | 婷色在线 | 日日夜夜网站 | 波多野结衣电影一区二区三区 | 婷婷社区五月天 | 超碰人人91| 久草在线视频看看 | 精品国产伦一区二区三区观看说明 | 丁香婷婷综合激情五月色 | 国内精品免费 | 丁香花在线观看免费完整版视频 | 亚洲成人第一区 | 最新超碰在线 | 欧美日韩国产色综合一二三四 | 一级做a爱片性色毛片www | 51久久成人国产精品麻豆 | 色在线中文字幕 | 在线你懂 | 天天干,天天操,天天射 | av电影免费看 | 成人cosplay福利网站 | 91探花在线视频 | 久久人人爽爽 | 久久国产一区二区三区 | 国产精品ssss在线亚洲 | 亚洲精品免费视频 | 中文免费观看 | 免费十分钟 | 国内精品久久久精品电影院 | 四虎影视精品成人 | 国产无套精品久久久久久 | 亚洲精品午夜aaa久久久 | 日韩精品久久久 | 精品国产一区二区三区久久影院 | 91av久久| 成人av av在线 | 国产粉嫩在线观看 | 91欧美日韩国产 | 日韩免费福利 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 五月av在线 | 91精品视频观看 | 丁香资源影视免费观看 | 日韩在线观看免费 | 免费中文字幕视频 | 久久久久久伊人 | 国产精品免费久久久久影院仙踪林 | 开心激情婷婷 | 欧美乱码精品一区 | 国产精品av久久久久久无 | 成年人网站免费在线观看 | 欧美xxxx性xxxxx高清 | 亚洲综合色婷婷 | 日韩在线视频一区二区三区 | 亚洲欧洲日韩在线观看 | 色婷婷骚婷婷 | 亚洲精品乱码久久久久久蜜桃91 | 日韩有码网站 | 992tv在线| 亚洲人成人天堂h久久 | 狠狠的日日 | 欧美巨大荫蒂茸毛毛人妖 | 中文字幕在线字幕中文 | 毛片网站在线 | 在线免费观看欧美日韩 | 少妇精品久久久一区二区免费 | 狠狠色网 | 99久热在线精品视频 | 99久久精品免费看国产免费软件 | 成人免费视频在线观看 | 亚洲精品午夜视频 | 黄色免费网战 | 超碰在线中文字幕 | av黄免费看 | a精品视频 | 亚洲国产精品成人va在线观看 | 99精品免费久久久久久久久 | 奇米影视四色8888 | 亚洲美女在线国产 | 亚洲乱码久久久 | 久久久99国产精品免费 | 在线色亚洲 | 91片黄在线观看动漫 | 99在线免费视频 | 91麻豆精品国产91久久久使用方法 | 少妇搡bbbb搡bbb搡忠贞 | 国产精品ssss在线亚洲 | 爱干视频| 在线观看网站黄 | 日韩久久久久久 | 久久久伦理 | 婷婷色综合色 | 免费男女羞羞的视频网站中文字幕 | 欧美精品亚洲精品日韩精品 | 久久久久久久网站 | 日本中文字幕观看 | 91传媒免费观看 | 日韩精品一区不卡 | 97色噜噜| 中文字幕亚洲不卡 | 97视频免费观看2区 亚洲视屏 | 欧美美女视频在线观看 | 一区二区免费不卡在线 | 天天操天天干天天爽 | 99视频精品免费视频 | 午夜久草 | 色婷五月天 | 有码中文在线 | 久久免费视频5 | 免费看亚洲毛片 | 欧美午夜一区二区福利视频 | 天天干 天天摸 天天操 | 欧美精品资源 | 美女免费黄视频网站 | 9色在线视频 | 91在线精品一区二区 | 久久视频 | 97视频在线观看播放 | 91私密视频| 久色网| 色婷婷成人网 | 亚洲精品国产高清 | 久久国产精品一国产精品 | 久久精品综合 | 久久精品中文 | 欧美日韩一二三四区 | av不卡在线看| 亚洲乱码国产乱码精品天美传媒 | 亚洲专区 国产精品 | 欧美激情亚洲综合 | 国产高清在线永久 | 81国产精品久久久久久久久久 | 99久在线精品99re8热视频 | 久久综合狠狠综合久久激情 | 在线国产一区二区 | 欧美激情va永久在线播放 | 最新超碰在线 | 黄色成年网站 | 国产白浆视频 | 日韩在线视频在线观看 | 黄色视屏av | 中文字幕视频三区 | 欧美怡红院 | 日韩欧美精品在线观看视频 | 丁香婷婷综合激情五月色 | 中文字幕在线观看你懂的 | 亚洲精品乱码 | 日本精品免费看 | 国产精品免费观看在线 | av天天澡天天爽天天av | 色先锋av资源中文字幕 | 超碰人人国产 | 狠狠干网站 | 91丨九色丨勾搭 | 国产最新视频在线观看 | 日韩免费一级a毛片在线播放一级 | 国产精品黄| 99视频国产精品免费观看 | 国产五月色婷婷六月丁香视频 | 福利视频在线看 | 日日操网 | 成人黄色大片在线免费观看 | 亚洲天堂网视频 | 天天伊人狠狠 | 国产日韩av在线 | 天天插天天爱 | 91精品国产一区二区在线观看 | 日韩欧美一区二区在线 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 最新av在线免费观看 | 欧美日产在线观看 | 九九久久婷婷 | 中文字幕在线影院 | 欧美精品久久久久久久久免 | 99久久久国产免费 | av片子在线观看 | 99精品国产免费久久久久久下载 | 曰本三级在线 | 999成人| 成人午夜精品久久久久久久3d | 久久日本视频 | 日韩免费电影 | 免费视频一区 | 日韩在线网址 | 国产在线精品国自产拍影院 | 久久久久国产成人精品亚洲午夜 | 看黄色91 | 欧美激情精品 | 免费看黄网站在线 | 欧美一级片在线免费观看 | 中文字幕在线观看网站 | 综合天天| 色综合天天狠天天透天天伊人 | 久久成人视屏 | 国产在线国偷精品产拍 | 久久毛片网站 | 午夜视频免费播放 | 亚洲精品午夜久久久久久久 | 在线之家免费在线观看电影 | 久草视频精品 | a资源在线 | 五月激情久久久 | 久久久久久免费网 | 在线观看视频一区二区三区 | 国产精品中文字幕在线播放 | 久久久久久久99精品免费观看 | 国产精品一级在线 | 久久理论电影 | 精品欧美小视频在线观看 | 亚洲无在线 | 美女免费视频观看网站 | 精品在线观看一区二区 | 久久草av | 国产精品一区二区电影 | 精品国产精品久久一区免费式 | 免费观看www视频 | 国产精品久久久久三级 | 亚洲伦理中文字幕 | 天天干天天做 | 国产99久久久国产精品免费看 | 特级毛片爽www免费版 | 又黄又爽免费视频 | 亚洲欧美日韩精品久久久 | 91网址在线观看 | 欧美性受极品xxxx喷水 | 精品96久久久久久中文字幕无 | 日本一区二区三区视频在线播放 | 免费观看一区二区 | 在线观看亚洲国产精品 | 精品日韩在线 | 欧美日韩在线观看一区二区三区 | 激情 婷婷 | 日韩精品欧美专区 | 丁香激情综合久久伊人久久 | 国产 欧美 在线 | 日韩成人高清在线 | 黄色aaa级片| 久久精品99北条麻妃 | www久久| 99热99re6国产在线播放 | 国偷自产中文字幕亚洲手机在线 | 国产高清视频免费 | 天天射天天射天天射 | 国产在线永久 | 2019中文最近的2019中文在线 | 免费色网 | 中文字幕日韩在线播放 | 黄色三级网站 | 欧美日韩一区二区三区在线观看视频 | 涩五月婷婷 | 久久精品屋 | 成人中文字幕+乱码+中文字幕 | 1区2区3区在线观看 三级动图 | 久久久久久久久久久免费 | 日韩在线视频播放 | 久久社区视频 | 婷婷五情天综123 | 亚洲精品免费观看视频 | 欧美一区二区三区在线播放 | 五月婷婷久久丁香 | 人人玩人人添人人澡超碰 | 色婷婷97| 国产精品9999久久久久仙踪林 | 天天色 天天| 视频在线观看国产 | 99久久婷婷 | 热久久视久久精品18亚洲精品 | 久草在线在线视频 | 亚洲在线观看av | 精品国产综合区久久久久久 | 久久久观看| 91亚洲精品国偷拍自产在线观看 | 亚洲成人av在线 | 天天操婷婷 | 91秒拍国产福利一区 | 插综合网| 五月天激情综合网 | 色天天| 国产精品精 | 最近中文字幕免费观看 | 欧美一区二区免费在线观看 | 国产精品视频大全 | 国产精品久久久一区二区三区网站 | 在线观看视频免费播放 | 一级黄色在线免费观看 | 中文字幕久久精品一区 | 久久影院午夜论 | 亚洲欧洲精品一区二区 | 成人小视频在线观看免费 | 四虎在线观看 | 日本精品免费看 | 人人插人人射 | 激情黄色av| 久草精品视频在线观看 | 久久久国产网站 | 午夜 在线 | 免费在线观看一区 | 国产精品美女久久久久久久久 | 亚洲狠狠操 | 久久综合久久八八 | 视频一区二区在线观看 | 日韩专区 在线 | 涩涩网站在线播放 | 粉嫩aⅴ一区二区三区 | 中文字幕第一页在线播放 | 欧美精品久 | 久久综合久久综合这里只有精品 | 国产精品96久久久久久吹潮 | 日韩中文在线播放 | 久久人人爽人人爽人人片av软件 | 色婷婷综合激情 | 日韩欧美中文 | 久久免费av | 夜夜夜夜操 | 精品99免费 | 中文字幕一区二区三区四区久久 | 亚洲精品乱码久久久久久按摩 | 成人av片免费观看app下载 | 91精品国自产在线偷拍蜜桃 | 亚洲精品国产精品乱码不99热 | 久久久久久国产精品久久 | 又爽又黄在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 黄网站免费久久 | 亚洲天堂网在线视频 | 人人爱在线视频 | 99久久精品国产网站 | 日韩xxxbbb| 国产免费叼嘿网站免费 | 99热官网 | 欧美在线一二区 | 国产手机视频精品 | 国产一区二区三区免费视频 | 久久久免费毛片 | 99久久精品免费看国产免费软件 | 久久久久久国产一区二区三区 | 国产精品久久久久久久久久妇女 | 国产91av视频在线观看 | 亚洲综合导航 | 亚洲美女视频在线观看 | 在线观看国产www | 国产亚洲一区二区在线观看 | 91免费网址| 国产一级淫片在线观看 | 91观看视频 | 99九九热只有国产精品 | 久久99精品国产麻豆婷婷 | 97超碰人人澡 | 久久国产一区 | 色婷婷六月天 | 久久国产99 | 久久久91精品国产 | 国产精品久久电影网 | 人人干人人上 | 久久久久久久影视 | 欧美日韩高清在线观看 | 国产一级视频在线免费观看 | 国产夫妻性生活自拍 | 久久精品成人 | 国产视频资源 | 毛片www| 中文字幕 在线看 | 色婷婷天天干 | 免费激情网 | 99热最新精品 | 国产精品 欧美 日韩 | 国产精品99久久久久久大便 | 久久久久久久久久久免费av | 天天综合久久综合 | 六月色丁香 | 久久久久国产一区二区三区四区 | 国产日韩精品欧美 | 日韩系列在线 | 一色屋精品视频在线观看 | 婷婷网五月天 | 亚洲精品理论 | 婷婷久久综合九色综合 | 成年人网站免费观看 | 91av在线国产 | 视频在线观看入口黄最新永久免费国产 | 日韩一级网站 | 亚洲国产三级 | 欧美大片www | 国产一区免费看 | 中文字幕日韩一区二区三区不卡 | 日本精品久久久一区二区三区 | 亚洲欧美成人网 | 五月激情综合婷婷 | 丁香五月亚洲综合在线 | 亚洲精品在线看 | 天天操夜夜操 | 国产成人一区二区三区久久精品 | 中文av影院| 日韩系列 | 亚洲国产一区av | 天天干天天操天天 | 大胆欧美gogo免费视频一二区 | 亚洲成人精品在线观看 | 中文字幕一区二区三区久久 | 久久久精品国产一区二区电影四季 | 欧洲精品在线视频 | 国产在线a免费观看 | 久久精品99国产精品 | 人人澡视频 | 久久伦理视频 | 丝袜制服综合网 | 黄色av网站在线免费观看 | 亚洲欧美日韩国产一区二区三区 | 国产色影院 | 麻豆视频免费看 | 欧美坐爱视频 | 日韩精品专区 | 手机在线日韩视频 | www.国产在线 | 国产精品视频 | 香蕉精品视频在线观看 | 天堂av在线7 | 成人久久 | 99热在线观看 | 米奇狠狠狠888 | 日韩区视频 | 久久久久久久国产精品影院 | 丁香花中文在线免费观看 | 亚洲精品国产精品乱码在线观看 | 亚洲电影av在线 | 91麻豆精品久久久久久 | www.操.com| 中文在线a√在线 | 免费观看全黄做爰大片国产 | 综合色中文 | 亚洲高清久久久 | 免费久久网站 | 久久久久成人精品 | 欧美a级片免费看 | 久久久久久久久久久福利 | 日本成人a | 国产护士hd高朝护士1 | 人人玩人人添人人 | 九九热99视频 | 福利视频一二区 | 手机av电影在线 | 日韩大片在线免费观看 | 99热精品国产 | 97在线资源 | 国产一区二区精品久久 | 国产精品18久久久久vr手机版特色 | 日韩中午字幕 | 国产精品精品国产色婷婷 | 精品一区在线 | 500部大龄熟乱视频 欧美日本三级 | 91网站免费观看 | 亚洲免费av电影 | 在线观看免费高清视频大全追剧 | 天天干视频在线 | 91视频亚洲 | 2024国产精品视频 | 国产精品久久久久久久av大片 | 国产999精品久久久影片官网 | 亚洲精品国精品久久99热一 | 午夜三级福利 | 日韩欧美精品一区二区 | 91精品电影 | 黄色特级毛片 | 美女一级毛片视频 | 天天曰天天爽 | 中文 一区二区 | 最新亚洲视频 | 91大神免费在线观看 | 国产精品成人aaaaa网站 | 色婷婷成人网 | 国产黄色片在线免费观看 | 日韩毛片精品 | 91网免费看 | 麻豆国产露脸在线观看 | 天天综合91 | 91豆花在线观看 | 国内视频1区 | 亚洲精品国产精品久久99 | 成人午夜电影在线 | 欧美日韩精品在线播放 | 五月天综合 | 黄色亚洲大片免费在线观看 | 日韩免费一区二区 | 91成人小视频 | 激情婷婷色 | 天天天综合 | 一区二区三区在线观看免费视频 | 久久精品99北条麻妃 | 天天爽人人爽夜夜爽 | 色婷婷亚洲精品 | 黄色特级片| 久久综合中文字幕 | 男女免费av| 久久精品美女视频网站 | 伊人五月天.com | 欧美激情综合色 | 伊人官网 | 丁香六月久久综合狠狠色 | 国产精品午夜久久久久久99热 | 久久精品综合一区 | 日韩手机在线观看 | 99久久久久免费精品国产 | 美女久久一区 | 成人黄色在线看 | 国产剧情一区二区在线观看 | 一级做a爱片性色毛片www | 欧美激情在线看 | 欧美在线观看小视频 | 91在线观看欧美日韩 | 天天干天天射天天操 | 天天插夜夜操 | av电影中文字幕在线观看 | 日本女人逼| 欧美大片www | 欧美男同网站 | 四虎国产视频 | 午夜在线免费观看 | 日韩在线观看中文 | 国产18精品乱码免费看 | 黄色av一区二区 | 一级α片 | 欧美精品乱码99久久影院 | 亚洲做受高潮欧美裸体 | 激情中文字幕 | 日三级在线 | 久久精品免费 | 视频在线播放国产 | 麻豆视频国产在线观看 | 国产婷婷在线观看 | 国产在线精品区 | 久久久亚洲网站 | 国产精品久久久久久久av电影 | 国产免费一区二区三区最新6 | 9ⅰ精品久久久久久久久中文字幕 | 日韩网站免费观看 | 日韩av在线高清 | 久久伦理| 日韩一区二区免费播放 | 黄色日批网站 | 国产亚洲精品av | 伊人电影在线观看 | 国产黄色在线观看 | www.久热| 天天操网站 | 99热.com| 日韩欧美综合在线视频 | 97超碰国产精品女人人人爽 | av解说在线观看 | 色av男人的天堂免费在线 | 丰满少妇一级 | 久久免费中文视频 | 不卡视频在线 | 播五月综合 | 久久久久久久久久久久99 | 97超碰人人看 | 久久视频6 | 精品一区二区在线看 | 久久国产a | 蜜桃av久久久亚洲精品 | 日韩在线观看高清 | 在线国产一区二区三区 | 色综合久久久久综合体桃花网 | 国产精品久久久久久久久久久久久 | 亚洲1区 在线 | 亚洲黄色一级视频 | 色激情五月| 在线免费观看黄 | 日韩美女黄色片 | 欧美日在线 | 国产99久久九九精品免费 | 日本中出在线观看 | 国产精品久久久久久久久久久杏吧 | av黄色影院 | av网站在线观看免费 | 伊人亚洲精品 | 99re久久精品国产 | 狠狠色香婷婷久久亚洲精品 | 一区二区三区在线影院 | 伊人开心激情 | 国产精品 日韩 欧美 | 国内精品小视频 | 麻豆精品传媒视频 | 六月丁香婷 | 97成人资源站 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 国产资源网 | 成人午夜电影在线播放 | 伊人影院在线观看 | 97超碰人人澡人人爱 | 亚洲精品高清在线观看 | av中文字幕在线观看网站 | 日韩精品中字 | 激情中文在线 | 久久精品五月 | 人人揉人人揉人人揉人人揉97 | 国产精品va在线 | 成人羞羞视频在线观看免费 | 亚洲日本黄色 | 91香蕉视频在线 | 婷婷激情小说网 | 99久久精品久久久久久清纯 | 国产高清一区二区 | 欧美高清视频不卡网 | 日韩一区正在播放 | 91精品久| 亚洲日本中文字幕在线观看 | 日韩一区二区三免费高清在线观看 | 日韩精品你懂的 | 免费视频你懂的 | 成人精品亚洲 | 色综合激情网 | 亚洲精品在线视频网站 | 国产黄网在线 | 人人爽人人爽人人爽学生一级 | 91成人网在线观看 | 亚洲电影黄色 | 黄色精品一区 | 欧美激情精品 | a√国产免费a| 久久久精品亚洲 | 天天天干天天天操 | 久热爱 | 国产三级午夜理伦三级 | 亚洲精品国产视频 | 久久综合加勒比 | 日本不卡123 | 夜夜操天天 | 99re8这里有精品热视频免费 | 999国内精品永久免费视频 | 国产视频黄 | 丝袜美女在线观看 | 国产成人综合在线观看 | 精品国产乱码一区二区三区在线 | 五月在线视频 | 国产原创在线 | 成人avav| 精品久久1 | 精品视频99 | 日本爱爱免费 | 久久精品国产第一区二区三区 | 91精品影视| 成人毛片在线观看视频 | 国产精品一区久久久久 | 在线中文字母电影观看 | 一区二区三区四区在线 | 精品在线一区二区 | 福利区在线观看 | 欧美网址在线观看 | 日韩精品中文字幕在线不卡尤物 | 久久精品国产成人精品 | 91九色视频在线播放 | 日韩欧美国产免费播放 | 国产精品一区久久久久 | 午夜久久影院 | 欧美日韩不卡一区二区 | 91c网站色版视频 | 久久a v电影| 久草青青在线观看 | 免费观看完整版无人区 | 911香蕉视频 | 国产成人精品一区二 | 午夜精品一区二区三区视频免费看 | 噜噜色官网 | 国产在线va | 高清一区二区 | 日韩a级免费视频 | 免费大片av | 日韩色av色资源 | 日韩精品国产一区 | 欧美日韩在线播放 | 久久再线视频 | 青青河边草免费直播 | 欧美日韩精品在线免费观看 | 国产一区在线免费观看 | 国产精品久久久久影院 | 精品国模一区二区 | 一区精品久久 | 亚洲女同videos | 久操久 | 2021av在线 | 欧美大片aaa | 国产专区视频在线 | 亚洲女人av | 97在线观看视频 | 亚洲午夜久久久影院 | 三级黄免费看 | 黄色最新网址 | 操操日日 | 久久精品欧美一区 | 中文字幕a在线 | 久久综合色8888 | 国产 日韩 中文字幕 | 日韩精品亚洲专区在线观看 | 国产精品第十页 | 婷婷激情网站 | 国产精品一区一区三区 | 中文字幕在线观看完整 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 在线成人免费电影 | 黄色三级免费观看 | 亚洲精品美女在线 | 美女网站视频免费黄 | 国产精品不卡在线观看 | 99一区二区三区 | 久久精品国产第一区二区三区 | wwxxxx日本| 在线导航av | 午夜精品一区二区三区在线视频 | 欧美日韩国产伦理 | 在线观看亚洲精品视频 | 在线观看一区二区视频 | 丁香六月国产 | 亚洲精品色 | 69久久久 | 久久久av电影 | 久久免费资源 | h久久| 中文字幕精品视频 |