Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
f943f300
提交
f943f300
authored
12月 01, 2015
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
init
上级
328f98a2
隐藏空白字符变更
内嵌
并排
正在显示
26 个修改的文件
包含
201 行增加
和
769 行删除
+201
-769
DynamicSchedulerUtil.java
...in/src/main/java/com/xxl/quartz/DynamicSchedulerUtil.java
+152
-0
TriggerServiceImpl.java
...rc/main/java/com/xxl/service/impl/TriggerServiceImpl.java
+4
-6
JobDetailDemo.java
...dmin/src/main/java/com/xxl/service/job/JobDetailDemo.java
+0
-0
TestDynamicJob.java
...min/src/main/java/com/xxl/service/job/TestDynamicJob.java
+4
-3
applicationcontext-trigger-db.xml
...dmin/src/main/resources/applicationcontext-trigger-db.xml
+0
-0
applicationcontext-trigger-local.xml
...n/src/main/resources/applicationcontext-trigger-local.xml
+1
-1
applicationcontext-trigger.xml
...b-admin/src/main/resources/applicationcontext-trigger.xml
+0
-35
log4j.properties
xxl-job-admin/src/main/resources/log4j.properties
+3
-3
quartz.properties
xxl-job-admin/src/main/resources/quartz.properties
+0
-0
Test.java
xxl-job-admin/src/test/java/Test.java
+0
-65
JunitTest.java
xxl-job-admin/src/test/java/quartz/JunitTest.java
+37
-2
pom.xml
xxl-job-demo/pom.xml
+0
-164
IndexController.java
...emo/src/main/java/com/xxl/controller/IndexController.java
+0
-16
DynamicSchedulerUtil.java
...mo/src/main/java/com/xxl/quartz/DynamicSchedulerUtil.java
+0
-91
JobModel.java
xxl-job-demo/src/main/java/com/xxl/quartz/JobModel.java
+0
-78
ITriggerService.java
...b-demo/src/main/java/com/xxl/service/ITriggerService.java
+0
-13
TriggerServiceImpl.java
...rc/main/java/com/xxl/service/impl/TriggerServiceImpl.java
+0
-28
applicationcontext-base.xml
xxl-job-demo/src/main/resources/applicationcontext-base.xml
+0
-39
applicationcontext-database.xml
...b-demo/src/main/resources/applicationcontext-database.xml
+0
-44
applicationcontext-tx.xml
xxl-job-demo/src/main/resources/applicationcontext-tx.xml
+0
-45
freemarker.properties
xxl-job-demo/src/main/resources/freemarker.properties
+0
-11
freemarker.variables.properties
...b-demo/src/main/resources/freemarker.variables.properties
+0
-3
jdbc.properties
xxl-job-demo/src/main/resources/jdbc.properties
+0
-5
log4j.properties
xxl-job-demo/src/main/resources/log4j.properties
+0
-10
springmvc-context.xml
xxl-job-demo/src/main/resources/springmvc-context.xml
+0
-51
web.xml
xxl-job-demo/src/main/webapp/WEB-INF/web.xml
+0
-56
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/quartz/DynamicSchedulerUtil.java
0 → 100644
浏览文件 @
f943f300
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
;
}
}
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/service/impl/TriggerServiceImpl.java
浏览文件 @
f943f300
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
;
...
...
@@ -19,12 +22,7 @@ public class TriggerServiceImpl implements ITriggerService {
* 全站静态化
*/
public
void
generateNetHtml
()
{
long
start
=
System
.
currentTimeMillis
();
logger
.
info
(
"全站静态化... start:{}"
,
start
);
long
end
=
System
.
currentTimeMillis
();
logger
.
info
(
"全站静态化... end:{}, cost:{}"
,
end
,
end
-
start
);
logger
.
info
(
"全站静态化 run at :{}"
,
FastDateFormat
.
getInstance
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
()));
}
}
xxl-job-
demo
/src/main/java/com/xxl/service/job/JobDetailDemo.java
→
xxl-job-
admin
/src/main/java/com/xxl/service/job/JobDetailDemo.java
浏览文件 @
f943f300
File moved
xxl-job-
demo/src/test/java/quartz
/TestDynamicJob.java
→
xxl-job-
admin/src/main/java/com/xxl/service/job
/TestDynamicJob.java
浏览文件 @
f943f300
package
quartz
;
package
com
.
xxl
.
service
.
job
;
import
org.quartz.Job
;
import
org.quartz.JobExecutionContext
;
...
...
@@ -11,7 +11,7 @@ public class TestDynamicJob implements Job {
@Override
public
void
execute
(
JobExecutionContext
context
)
throws
JobExecutionException
{
final
Object
mailGuid
=
context
.
getMergedJobDataMap
().
get
(
"mailGuid"
);
System
.
out
.
println
(
"[
Dynamic-Job] It is
"
+
new
Date
()
+
" now, mailGuid="
+
mailGuid
);
Object
mailGuid
=
context
.
getMergedJobDataMap
().
get
(
"mailGuid"
);
System
.
out
.
println
(
"[
demo-job] run at
"
+
new
Date
()
+
" now, mailGuid="
+
mailGuid
);
}
}
\ No newline at end of file
xxl-job-
demo
/src/main/resources/applicationcontext-trigger-db.xml
→
xxl-job-
admin
/src/main/resources/applicationcontext-trigger-db.xml
浏览文件 @
f943f300
File moved
xxl-job-
demo
/src/main/resources/applicationcontext-trigger-local.xml
→
xxl-job-
admin
/src/main/resources/applicationcontext-trigger-local.xml
浏览文件 @
f943f300
...
...
@@ -19,7 +19,7 @@
<!-- 全站静态化:Cron Trigger (quartz-2.x的配置) -->
<bean
id=
"generateNetHtmlTrigger"
class=
"org.springframework.scheduling.quartz.CronTriggerFactoryBean"
>
<property
name=
"jobDetail"
ref=
"generateNetHtmlJobDetail"
/>
<property
name=
"cronExpression"
value=
"0/
3
* * * * ? *"
/>
<property
name=
"cronExpression"
value=
"0/
10
* * * * ? *"
/>
</bean>
<!-- Job被加载到内存中,每个集群节点相互独立,都会执行该任务 -->
...
...
xxl-job-admin/src/main/resources/applicationcontext-trigger.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?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>
\ No newline at end of file
xxl-job-admin/src/main/resources/log4j.properties
浏览文件 @
f943f300
...
...
@@ -2,9 +2,9 @@ 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-
admin
- %p [%c] - <%m>%n
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-
admin
.log
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-
admin
- %p [%c] - <%m>%n
log4j.appender.logFile.layout.ConversionPattern
=
%d - xxl-job-
demo
- %p [%c] - <%m>%n
xxl-job-
demo
/src/main/resources/quartz.properties
→
xxl-job-
admin
/src/main/resources/quartz.properties
浏览文件 @
f943f300
File moved
xxl-job-admin/src/test/java/Test.java
deleted
100644 → 0
浏览文件 @
328f98a2
import
java.util.Date
;
import
java.util.Timer
;
import
org.apache.commons.lang.time.FastDateFormat
;
public
class
Test
{
static
class
DemoTimeTask
extends
java
.
util
.
TimerTask
{
public
void
run
()
{
System
.
out
.
println
(
"run:"
+
FastDateFormat
.
getInstance
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
()));
}
}
// ??? 某一个时间段内,重复执行
// runTime:第一次执行时间
// delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
// period:重复执行的时间间隔
public
static
Timer
mainTimer
;
public
static
void
main
(
String
[]
args
)
{
// 调度器
mainTimer
=
new
Timer
();
// Demo任务
DemoTimeTask
timeTask
=
new
DemoTimeTask
();
System
.
out
.
println
(
"now:"
+
FastDateFormat
.
getInstance
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
()));
// 1、在特定时间执行任务,只执行一次
//Date runTime = DateUtils.addSeconds(new Date(), 1);
//mainTimer.schedule(timeTask, runTime); // runTime
// 2、在特定时间之后执行任务,只执行一次
//long delay = 1000;
//mainTimer.schedule(timeTask, delay); // delay/ms
// 3、指定第一次执行的时间,然后按照间隔时间,重复执行
//Date firstTime = DateUtils.addSeconds(new Date(), 1);
//long period = 1000;
//mainTimer.schedule(timeTask, firstTime, period); // "period/ms" after "firstTime"
// 4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行
//long delay = 1000;
//long period = 1000;
//mainTimer.schedule(timeTask, delay, period); // "period/ms" after "delay/ms"
// 5、第一次执行之后,特定频率执行,与3同
//Date firstTime = DateUtils.addSeconds(new Date(), 1);
//long period = 1000;
//mainTimer.scheduleAtFixedRate(timeTask, firstTime, period);
// 6、在delay毫秒之后第一次执行,后按照特定频率执行
long
delay
=
1000
;
long
period
=
1000
;
mainTimer
.
scheduleAtFixedRate
(
timeTask
,
delay
,
period
);
/**
* <1>schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次
* <2>scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务
*/
// Timer注销
mainTimer
.
cancel
();
}
}
xxl-job-
demo
/src/test/java/quartz/JunitTest.java
→
xxl-job-
admin
/src/test/java/quartz/JunitTest.java
浏览文件 @
f943f300
...
...
@@ -2,29 +2,64 @@ 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.
quartz.JobModel
;
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
(
new
JobModel
(
"Jost-job"
,
"0/1 * * * * ?"
,
TestDynamicJob
.
class
)
);
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
);
}
}
xxl-job-demo/pom.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<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>
<parent>
<groupId>
com.xxl
</groupId>
<artifactId>
xxl-job
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</parent>
<artifactId>
xxl-job-demo
</artifactId>
<packaging>
war
</packaging>
<properties>
<spring.version>
3.2.14.RELEASE
</spring.version>
</properties>
<dependencies>
<!-- springframe start -->
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-webmvc
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context-support
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-orm
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-test
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<!-- springframe end -->
<!-- aspectjweaver (support spring aop) -->
<dependency>
<groupId>
org.aspectj
</groupId>
<artifactId>
aspectjweaver
</artifactId>
<version>
1.8.7
</version>
</dependency>
<!-- jackson (support spring json) -->
<dependency>
<groupId>
org.codehaus.jackson
</groupId>
<artifactId>
jackson-mapper-asl
</artifactId>
<version>
1.9.13
</version>
</dependency>
<!-- slf4j -->
<dependency>
<groupId>
org.slf4j
</groupId>
<artifactId>
slf4j-log4j12
</artifactId>
<version>
1.7.5
</version>
</dependency>
<!-- freemarker -->
<dependency>
<groupId>
org.freemarker
</groupId>
<artifactId>
freemarker
</artifactId>
<version>
2.3.20
</version>
</dependency>
<!-- commons-beanutils -->
<dependency>
<groupId>
commons-beanutils
</groupId>
<artifactId>
commons-beanutils
</artifactId>
<version>
1.9.2
</version>
</dependency>
<!-- commons-lang -->
<dependency>
<groupId>
commons-lang
</groupId>
<artifactId>
commons-lang
</artifactId>
<version>
2.6
</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>
javax.servlet
</groupId>
<artifactId>
servlet-api
</artifactId>
<version>
2.5
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
javax.servlet.jsp
</groupId>
<artifactId>
jsp-api
</artifactId>
<version>
2.1
</version>
<scope>
provided
</scope>
</dependency>
<!-- junit -->
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.11
</version>
<scope>
test
</scope>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>
c3p0
</groupId>
<artifactId>
c3p0
</artifactId>
<version>
0.9.1.2
</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis-spring
</artifactId>
<version>
1.2.2
</version>
</dependency>
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis
</artifactId>
<version>
3.2.8
</version>
</dependency>
<!-- mysql-connector -->
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
5.1.29
</version>
</dependency>
<!-- quartz :quartz-2.2.1/c3p0-0.9.1.1/slf4j-api-1.6.6 -->
<dependency>
<groupId>
org.quartz-scheduler
</groupId>
<artifactId>
quartz
</artifactId>
<version>
2.2.1
</version>
</dependency>
<!-- xxl-mq-core -->
<dependency>
<groupId>
com.xxl
</groupId>
<artifactId>
xxl-job-core
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.1
</version>
<configuration>
<source>
1.6
</source>
<target>
1.6
</target>
<encoding>
UTF8
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-war-plugin
</artifactId>
<version>
2.2
</version>
<configuration>
<archiveClasses>
true
</archiveClasses>
</configuration>
</plugin>
</plugins>
</build>
</project>
xxl-job-demo/src/main/java/com/xxl/controller/IndexController.java
deleted
100644 → 0
浏览文件 @
328f98a2
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"
;
}
}
xxl-job-demo/src/main/java/com/xxl/quartz/DynamicSchedulerUtil.java
deleted
100644 → 0
浏览文件 @
328f98a2
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
;
}
}
\ No newline at end of file
xxl-job-demo/src/main/java/com/xxl/quartz/JobModel.java
deleted
100644 → 0
浏览文件 @
328f98a2
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
();
}
}
\ No newline at end of file
xxl-job-demo/src/main/java/com/xxl/service/ITriggerService.java
deleted
100644 → 0
浏览文件 @
328f98a2
package
com
.
xxl
.
service
;
/**
* Trigger Service
* @author xuxueli
*/
public
interface
ITriggerService
{
/**
* 全站静态化
*/
public
void
generateNetHtml
();
}
xxl-job-demo/src/main/java/com/xxl/service/impl/TriggerServiceImpl.java
deleted
100644 → 0
浏览文件 @
328f98a2
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
()));
}
}
xxl-job-demo/src/main/resources/applicationcontext-base.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?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>
\ No newline at end of file
xxl-job-demo/src/main/resources/applicationcontext-database.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?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:aop=
"http://www.springframework.org/schema/aop"
xmlns:tx=
"http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
>
<context:annotation-config
/>
<context:component-scan
base-package=
"com.xxl.service.impl, com.xxl.dao.impl"
/>
<!-- c3p0:Main数据源 -->
<bean
id=
"dataSource"
class=
"com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method=
"close"
>
<property
name=
"driverClass"
value=
"${c3p0.driverClass}"
/>
<property
name=
"jdbcUrl"
value=
"${c3p0.url}"
/>
<property
name=
"user"
value=
"${c3p0.user}"
/>
<property
name=
"password"
value=
"${c3p0.password}"
/>
<property
name=
"initialPoolSize"
value=
"3"
/>
<property
name=
"minPoolSize"
value=
"2"
/>
<property
name=
"maxPoolSize"
value=
"10"
/>
<property
name=
"maxIdleTime"
value=
"60"
/>
<property
name=
"acquireRetryDelay"
value=
"1000"
/>
<property
name=
"acquireRetryAttempts"
value=
"10"
/>
<property
name=
"preferredTestQuery"
value=
"SELECT 1"
/>
</bean>
<bean
id=
"sqlSessionFactory"
class=
"org.mybatis.spring.SqlSessionFactoryBean"
>
<property
name=
"dataSource"
ref=
"dataSource"
/>
<property
name=
"mapperLocations"
value=
"classpath*:com/xxl/core/model/mapper/*.xml"
/>
</bean>
<!-- Template在Junit测试的时候,必须使用scope="prototype",原因未知 -->
<bean
id=
"sqlSessionTemplate"
class=
"org.mybatis.spring.SqlSessionTemplate"
scope=
"prototype"
>
<constructor-arg
index=
"0"
ref=
"sqlSessionFactory"
/>
</bean>
</beans>
\ No newline at end of file
xxl-job-demo/src/main/resources/applicationcontext-tx.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?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:aop=
"http://www.springframework.org/schema/aop"
xmlns:tx=
"http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
>
<!-- 事务管理器(声明式事务) -->
<bean
id=
"transactionManager"
class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
<property
name=
"dataSource"
ref=
"dataSource"
/>
</bean>
<!-- 启动事务注解(方式1:注解方式) -->
<tx:annotation-driven
transaction-manager=
"transactionManager"
proxy-target-class=
"true"
/>
<!-- 事务通知(方式2:XML事务管理) -->
<tx:advice
id=
"txAdvice"
transaction-manager=
"transactionManager"
>
<tx:attributes>
<tx:method
name=
"detail*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"visit*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"get*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"find*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"check*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"list*"
propagation=
"SUPPORTS"
/>
<tx:method
name=
"*"
propagation=
"REQUIRED"
rollback-for=
"exception"
/>
</tx:attributes>
</tx:advice>
<!-- AOP配置 -->
<aop:config>
<!-- 定义一个切入点 -->
<aop:pointcut
id=
"txoperation"
expression=
"execution(* com.xxl.service.imp.*.*(..))"
/>
<!-- 切入点事务通知 -->
<aop:advisor
pointcut-ref=
"txoperation"
advice-ref=
"txAdvice"
/>
</aop:config>
</beans>
\ No newline at end of file
xxl-job-demo/src/main/resources/freemarker.properties
deleted
100644 → 0
浏览文件 @
328f98a2
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
\ No newline at end of file
xxl-job-demo/src/main/resources/freemarker.variables.properties
deleted
100644 → 0
浏览文件 @
328f98a2
# 静态文件地址
static_url
=
https://www.baidu.com/
\ No newline at end of file
xxl-job-demo/src/main/resources/jdbc.properties
deleted
100644 → 0
浏览文件 @
328f98a2
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
\ No newline at end of file
xxl-job-demo/src/main/resources/log4j.properties
deleted
100644 → 0
浏览文件 @
328f98a2
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
xxl-job-demo/src/main/resources/springmvc-context.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:aop=
"http://www.springframework.org/schema/aop"
xmlns:context=
"http://www.springframework.org/schema/context"
xmlns:p=
"http://www.springframework.org/schema/p"
xmlns:tx=
"http://www.springframework.org/schema/tx"
xmlns:mvc=
"http://www.springframework.org/schema/mvc"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
>
<description>
Spring-web MVC配置
</description>
<mvc:annotation-driven
/>
<context:component-scan
base-package=
"com.xxl.controller"
/>
<mvc:resources
mapping=
"/favicon.ico"
location=
"/favicon.ico"
/>
<mvc:resources
mapping=
"/static/**"
location=
"/static/"
/>
<bean
id=
"viewResolver"
class=
"org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
>
<property
name=
"viewClass"
value=
"org.springframework.web.servlet.view.freemarker.FreeMarkerView"
/>
<!-- 解析视图模板类 -->
<property
name=
"prefix"
value=
""
/>
<!-- 模板前后缀,指定html页面为模板 -->
<property
name=
"suffix"
value=
".ftl"
/>
<property
name=
"contentType"
value=
"text/html;charset=UTF-8"
/>
<!-- 模板输出内容编码 (此处应与defaultEncoding保持一致) -->
<property
name=
"exposeSpringMacroHelpers"
value=
"true"
/>
<!-- 访问Request/Session宏助手 -->
<property
name=
"exposeRequestAttributes"
value=
"true"
/>
<!-- 允许访问Request属性,默认为false -->
<property
name=
"exposeSessionAttributes"
value=
"true"
/>
<!-- 允许访问Session属性,默认为false -->
<property
name=
"requestContextAttribute"
value=
"request"
/>
<!-- 将HttpServletRequest的属性存放到request这个变量中 -->
<property
name=
"cache"
value=
"true"
/>
<property
name=
"order"
value=
"0"
/>
</bean>
<!-- <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.xxl.controller.interceptor.PermissionInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<bean id="exceptionResolver" class="com.xxl.controller.resolver.WebExceptionResolver" /> -->
</beans>
\ No newline at end of file
xxl-job-demo/src/main/webapp/WEB-INF/web.xml
deleted
100644 → 0
浏览文件 @
328f98a2
<?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>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论