parent
328f98a252
commit
f943f300ca
@ -0,0 +1,151 @@
|
||||
package com.xxl.quartz;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.quartz.CronScheduleBuilder;
|
||||
import org.quartz.CronTrigger;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobBuilder;
|
||||
import org.quartz.JobDataMap;
|
||||
import org.quartz.JobDetail;
|
||||
import org.quartz.JobKey;
|
||||
import org.quartz.Scheduler;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.quartz.Trigger;
|
||||
import org.quartz.TriggerBuilder;
|
||||
import org.quartz.TriggerKey;
|
||||
import org.quartz.impl.matchers.GroupMatcher;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
public final class DynamicSchedulerUtil implements InitializingBean {
|
||||
private static final Logger logger = LoggerFactory.getLogger(DynamicSchedulerUtil.class);
|
||||
|
||||
// Scheduler
|
||||
private static Scheduler scheduler;
|
||||
public static void setScheduler(Scheduler scheduler) {
|
||||
DynamicSchedulerUtil.scheduler = scheduler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(scheduler, "quartz scheduler is null");
|
||||
logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
|
||||
}
|
||||
|
||||
// getJobKeys
|
||||
public static Set<JobKey> getJobKeys(){
|
||||
try {
|
||||
String groupName = scheduler.getJobGroupNames().get(0);
|
||||
return scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// addJob 新增
|
||||
public static boolean addJob(String triggerKeyName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> jobData) throws SchedulerException {
|
||||
// TriggerKey : name + group
|
||||
String group = Scheduler.DEFAULT_GROUP;
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
|
||||
|
||||
// TriggerKey valid if_exists
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
Trigger trigger = scheduler.getTrigger(triggerKey);
|
||||
logger.info(">>>>>>>>> Already exist trigger [" + trigger + "] by key [" + triggerKey + "] in Scheduler");
|
||||
return false;
|
||||
}
|
||||
|
||||
// CronTrigger : TriggerKey + cronExpression
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
|
||||
|
||||
// JobDetail : jobClass
|
||||
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(triggerKeyName, group).build();
|
||||
if (jobData!=null && jobData.size() > 0) {
|
||||
JobDataMap jobDataMap = jobDetail.getJobDataMap();
|
||||
jobDataMap.putAll(jobData); // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
|
||||
}
|
||||
|
||||
// schedule : jobDetail + cronTrigger
|
||||
Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
|
||||
logger.info(">>>>>>>>>>> addJob success, jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);
|
||||
return true;
|
||||
}
|
||||
|
||||
// unscheduleJob 删除
|
||||
public static boolean removeJob(String triggerKeyName) throws SchedulerException {
|
||||
// TriggerKey : name + group
|
||||
String group = Scheduler.DEFAULT_GROUP;
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
|
||||
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
result = scheduler.unscheduleJob(triggerKey);
|
||||
}
|
||||
logger.info(">>>>>>>>>>> removeJob, triggerKey:{}, result [{}]", triggerKey, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
// reschedule 重置cron
|
||||
public static boolean rescheduleJob(String triggerKeyName, String cronExpression) throws SchedulerException {
|
||||
// TriggerKey : name + group
|
||||
String group = Scheduler.DEFAULT_GROUP;
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
|
||||
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
// CronTrigger : TriggerKey + cronExpression
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
|
||||
|
||||
Date date = scheduler.rescheduleJob(triggerKey, cronTrigger);
|
||||
result = true;
|
||||
logger.info(">>>>>>>>>>> resumeJob success, triggerKey:{}, cronExpression:{}, date:{}", triggerKey, cronExpression, date);
|
||||
} else {
|
||||
logger.info(">>>>>>>>>>> resumeJob fail, triggerKey:{}, cronExpression:{}", triggerKey, cronExpression);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Pause 暂停
|
||||
public static boolean pauseJob(String triggerKeyName) throws SchedulerException {
|
||||
// TriggerKey : name + group
|
||||
String group = Scheduler.DEFAULT_GROUP;
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
|
||||
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
scheduler.pauseTrigger(triggerKey);
|
||||
result = true;
|
||||
logger.info(">>>>>>>>>>> pauseJob success, triggerKey:{}", triggerKey);
|
||||
} else {
|
||||
logger.info(">>>>>>>>>>> pauseJob fail, triggerKey:{}", triggerKey);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// resume 重启
|
||||
public static boolean resumeTrigger(String triggerKeyName) throws SchedulerException {
|
||||
// TriggerKey : name + group
|
||||
String group = Scheduler.DEFAULT_GROUP;
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
|
||||
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
scheduler.resumeTrigger(triggerKey);
|
||||
result = true;
|
||||
logger.info(">>>>>>>>>>> resumeJob success, triggerKey:{}", triggerKey);
|
||||
} else {
|
||||
logger.info(">>>>>>>>>>> resumeJob fail, triggerKey:{}", triggerKey);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
<?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:util="http://www.springframework.org/schema/util"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
||||
http://www.springframework.org/schema/util
|
||||
http://www.springframework.org/schema/util/spring-util.xsd">
|
||||
|
||||
<!-- 全站静态化:Job Detail -->
|
||||
<bean id="generateNetHtmlJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
|
||||
<property name="targetObject" ref="triggerService" />
|
||||
<property name="targetMethod" value="generateNetHtml" />
|
||||
<property name="concurrent" value="false" />
|
||||
</bean>
|
||||
|
||||
<!-- 全站静态化:Cron Trigger (quartz-2.x的配置) -->
|
||||
<bean id="generateNetHtmlTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
|
||||
<property name="jobDetail" ref="generateNetHtmlJobDetail" />
|
||||
<property name="cronExpression" value="0 0/5 * * * ? *" />
|
||||
</bean>
|
||||
|
||||
<!-- 启动触发器的配置开始 -->
|
||||
<bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
|
||||
<property name="triggers">
|
||||
<list>
|
||||
<ref bean="generateNetHtmlTrigger" />
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
</beans>
|
@ -0,0 +1,65 @@
|
||||
package quartz;
|
||||
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.quartz.JobKey;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.xxl.quartz.DynamicSchedulerUtil;
|
||||
import com.xxl.service.job.TestDynamicJob;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations = "classpath*:applicationcontext-*.xml")
|
||||
public class JunitTest {
|
||||
|
||||
@Test
|
||||
public void getJobKeys() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
Set<JobKey> list = DynamicSchedulerUtil.getJobKeys();
|
||||
System.out.println(list);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addJob() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.addJob("demo-job02", "0/2 * * * * ?", TestDynamicJob.class, null);
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void removeJob() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.removeJob("demo-job02");
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rescheduleJob() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.rescheduleJob("demo-job02", "0/3 * * * * ?");
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pauseJob() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.pauseJob("demo-job02");
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resumeTrigger() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.resumeTrigger("demo-job02");
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package com.xxl.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/")
|
||||
public class IndexController {
|
||||
|
||||
@RequestMapping("")
|
||||
@ResponseBody
|
||||
private String index() {
|
||||
return "hehe";
|
||||
}
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
package com.xxl.quartz;
|
||||
|
||||
import org.quartz.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public final class DynamicSchedulerUtil implements InitializingBean {
|
||||
private static final Logger logger = LoggerFactory.getLogger(DynamicSchedulerUtil.class);
|
||||
|
||||
// Scheduler
|
||||
private static Scheduler scheduler;
|
||||
public static void setScheduler(Scheduler scheduler) {
|
||||
DynamicSchedulerUtil.scheduler = scheduler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(scheduler, "quartz scheduler is null");
|
||||
logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
|
||||
}
|
||||
|
||||
// Add 新增
|
||||
public static boolean addJob(JobModel job) throws SchedulerException {
|
||||
final TriggerKey triggerKey = job.getTriggerKey();
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
final Trigger trigger = scheduler.getTrigger(triggerKey);
|
||||
logger.info(">>>>>>>>> Already exist trigger [" + trigger + "] by key [" + triggerKey + "] in Scheduler");
|
||||
return false;
|
||||
}
|
||||
|
||||
final CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
|
||||
final CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey)
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
|
||||
final JobDetail jobDetail = job.getJobDetail();
|
||||
final Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
|
||||
logger.debug("Register DynamicJob {} on [{}]", job, date);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Pause 暂停-指定Job
|
||||
public static boolean pauseJob(JobModel existJob) throws SchedulerException {
|
||||
final TriggerKey triggerKey = existJob.getTriggerKey();
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
scheduler.pauseTrigger(triggerKey);
|
||||
result = true;
|
||||
logger.debug("Pause exist DynamicJob {}, triggerKey [{}] successful", existJob, triggerKey);
|
||||
} else {
|
||||
logger.debug("Failed pause exist DynamicJob {}, because not fount triggerKey [{}]", existJob, triggerKey);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Resume 重启-指定Job
|
||||
public static boolean resumeJob(JobModel existJob) throws SchedulerException {
|
||||
final TriggerKey triggerKey = existJob.getTriggerKey();
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
final CronTrigger newTrigger = existJob.cronTrigger();
|
||||
final Date date = scheduler.rescheduleJob(triggerKey, newTrigger);
|
||||
|
||||
result = true;
|
||||
logger.debug("Resume exist DynamicJob {}, triggerKey [{}] on [{}] successful", existJob, triggerKey, date);
|
||||
} else {
|
||||
logger.debug("Failed resume exist DynamicJob {}, because not fount triggerKey [{}]", existJob, triggerKey);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Remove exists job 移除-指定Job
|
||||
public static boolean removeJob(JobModel existJob) throws SchedulerException {
|
||||
final TriggerKey triggerKey = existJob.getTriggerKey();
|
||||
boolean result = false;
|
||||
if (scheduler.checkExists(triggerKey)) {
|
||||
result = scheduler.unscheduleJob(triggerKey);
|
||||
}
|
||||
|
||||
logger.debug("Remove DynamicJob {} result [{}]", existJob, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
package com.xxl.quartz;
|
||||
|
||||
import org.quartz.CronScheduleBuilder;
|
||||
import org.quartz.CronTrigger;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobBuilder;
|
||||
import org.quartz.JobDataMap;
|
||||
import org.quartz.JobDetail;
|
||||
import org.quartz.Scheduler;
|
||||
import org.quartz.TriggerBuilder;
|
||||
import org.quartz.TriggerKey;
|
||||
|
||||
/**
|
||||
* 任务model
|
||||
* @author xuxueli 2015-12-1 16:01:19
|
||||
*/
|
||||
public class JobModel {
|
||||
|
||||
// param
|
||||
private String group;
|
||||
private String name;
|
||||
private String cronExpression;
|
||||
private Class<? extends Job> jobClass;
|
||||
|
||||
public JobModel(String name, String cronExpression, Class<? extends Job> jobClass) {
|
||||
this.group = Scheduler.DEFAULT_GROUP;
|
||||
this.name = name;
|
||||
this.cronExpression = cronExpression;
|
||||
this.jobClass = jobClass;
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
public void setGroup(String group) {
|
||||
this.group = group;
|
||||
}
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
public String getCronExpression() {
|
||||
return cronExpression;
|
||||
}
|
||||
public void setCronExpression(String cronExpression) {
|
||||
this.cronExpression = cronExpression;
|
||||
}
|
||||
public Class<? extends Job> getJobClass() {
|
||||
return jobClass;
|
||||
}
|
||||
public void setJobClass(Class<? extends Job> jobClass) {
|
||||
this.jobClass = jobClass;
|
||||
}
|
||||
|
||||
// TriggerKey
|
||||
public TriggerKey getTriggerKey() {
|
||||
return TriggerKey.triggerKey(this.name, this.group);
|
||||
}
|
||||
// JobDetail
|
||||
public JobDetail getJobDetail() {
|
||||
return JobBuilder.newJob(jobClass).withIdentity(this.name, this.group).build();
|
||||
}
|
||||
// JobDataMap.add
|
||||
public JobModel addJobData(String key, Object value) {
|
||||
JobDataMap jobDataMap = this.getJobDetail().getJobDataMap();
|
||||
jobDataMap.put(key, value);
|
||||
return this;
|
||||
}
|
||||
// CronTrigger
|
||||
public CronTrigger cronTrigger() {
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(this.cronExpression);
|
||||
return TriggerBuilder.newTrigger().withIdentity(this.getTriggerKey()).withSchedule(cronScheduleBuilder).build();
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package com.xxl.service;
|
||||
|
||||
/**
|
||||
* Trigger Service
|
||||
* @author xuxueli
|
||||
*/
|
||||
public interface ITriggerService {
|
||||
|
||||
/**
|
||||
* 全站静态化
|
||||
*/
|
||||
public void generateNetHtml();
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package com.xxl.service.impl;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.commons.lang.time.FastDateFormat;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.xxl.service.ITriggerService;
|
||||
|
||||
/**
|
||||
* Trigger Service
|
||||
* @author xuxueli
|
||||
*/
|
||||
@Service("triggerService")
|
||||
public class TriggerServiceImpl implements ITriggerService {
|
||||
private static transient Logger logger = LoggerFactory.getLogger(TriggerServiceImpl.class);
|
||||
|
||||
|
||||
/**
|
||||
* 全站静态化
|
||||
*/
|
||||
public void generateNetHtml() {
|
||||
logger.info("全站静态化 run at :{}", FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
}
|
||||
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
<?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:util="http://www.springframework.org/schema/util"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
||||
http://www.springframework.org/schema/util
|
||||
http://www.springframework.org/schema/util/spring-util.xsd">
|
||||
|
||||
<context:annotation-config />
|
||||
<context:component-scan base-package="com.xxl.service.impl, com.xxl.dao.impl" />
|
||||
|
||||
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
|
||||
<property name="templateLoaderPath" value="/WEB-INF/template/" />
|
||||
<property name="freemarkerSettings">
|
||||
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
|
||||
<property name="location" value="classpath:freemarker.properties" />
|
||||
</bean>
|
||||
</property>
|
||||
<property name="freemarkerVariables">
|
||||
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
|
||||
<property name="location" value="classpath:freemarker.variables.properties" />
|
||||
</bean>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
|
||||
<property name="fileEncoding" value="utf-8" />
|
||||
<property name="locations">
|
||||
<list>
|
||||
<value>classpath*:jdbc.properties</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
</beans>
|
@ -1,10 +0,0 @@
|
||||
template_update_delay=0
|
||||
default_encoding=UTF-8
|
||||
output_encoding=UTF-8
|
||||
locale=zh_CN
|
||||
number_format=0.##########
|
||||
date_format=yyyy-MM-dd
|
||||
time_format=HH:mm:ss
|
||||
datetime_format=yyyy-MM-dd HH:mm:s
|
||||
classic_compatible=true
|
||||
template_exception_handler=ignore
|
@ -1,2 +0,0 @@
|
||||
# 静态文件地址
|
||||
static_url=https://www.baidu.com/
|
@ -1,4 +0,0 @@
|
||||
c3p0.driverClass=com.mysql.jdbc.Driver
|
||||
c3p0.url=jdbc:mysql://localhost:3306/test?Unicode=true&characterEncoding=UTF-8
|
||||
c3p0.user=root
|
||||
c3p0.password=root_pwd
|
@ -1,10 +0,0 @@
|
||||
log4j.rootLogger=info,console
|
||||
|
||||
log4j.appender.console=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.console.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.console.layout.ConversionPattern=%d - xxl-job-demo - %p [%c] - <%m>%n
|
||||
|
||||
log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender
|
||||
log4j.appender.logFile.File=${catalina.base}/logs/xxl-job-demo.log
|
||||
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.logFile.layout.ConversionPattern=%d - xxl-job-demo - %p [%c] - <%m>%n
|
@ -1,55 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
|
||||
id="WebApp_ID" version="2.5">
|
||||
<display-name>xxl-job-demo</display-name>
|
||||
|
||||
<context-param>
|
||||
<param-name>contextConfigLocation</param-name>
|
||||
<param-value>classpath*:applicationcontext-*.xml</param-value>
|
||||
</context-param>
|
||||
|
||||
<listener>
|
||||
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
|
||||
</listener>
|
||||
<listener>
|
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<filter>
|
||||
<filter-name>encodingFilter</filter-name>
|
||||
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
|
||||
<init-param>
|
||||
<param-name>encoding</param-name>
|
||||
<param-value>UTF-8</param-value>
|
||||
</init-param>
|
||||
<init-param>
|
||||
<param-name>forceEncoding</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>encodingFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>springmvc</servlet-name>
|
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
||||
<init-param>
|
||||
<param-name>contextConfigLocation</param-name>
|
||||
<param-value>classpath*:springmvc-context.xml</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>springmvc</servlet-name>
|
||||
<url-pattern>/</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<welcome-file-list>
|
||||
<welcome-file>index.html</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
</web-app>
|
@ -1,30 +0,0 @@
|
||||
package quartz;
|
||||
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import com.xxl.quartz.DynamicSchedulerUtil;
|
||||
import com.xxl.quartz.JobModel;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations = "classpath*:applicationcontext-*.xml")
|
||||
public class JunitTest {
|
||||
|
||||
@Test
|
||||
public void addJob() throws SchedulerException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException {
|
||||
boolean ret = DynamicSchedulerUtil.addJob(new JobModel("Jost-job", "0/1 * * * * ?", TestDynamicJob.class));
|
||||
System.out.println(ret);
|
||||
TimeUnit.SECONDS.sleep(30);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in new issue