Quartz †
下記サイトのチュートリアルあたりが参考になるはず。
小技など †
コンテキスト設定ファイルで設定してみる †
まず struts.xml に struts.objectFactory を spring で設定するように書いておく。
struts.xml(一部)
1
2
3
|
| <constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" value="name" />
|
ここは名前一致で。型一致(value="type")でいけるかどうかは未確認。
quartz.properties を書く。
Quartz のセットの中にサンプルがあるので、必要な部分のコメントをはずして設定する。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| #============================================================================
# Configure Main Scheduler Properties
#============================================================================
#org.quartz.scheduler.instanceName = TestScheduler
#org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
##データソースは server.xml で設定する場合は必要ないはず。
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.dataSource = myDS
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.isClustered = false
#============================================================================
# Configure Datasources
#============================================================================
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
#org.quartz.plugin.jobInitializer.fileNames = jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 10
#org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
|
プロジェクト直下に .springBeans というファイルを配置。
以下のように書く。
.springBeans
1
2
3
4
5
6
7
8
9
10
11
|
| <?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
<configExtensions>
<configExtension>xml</configExtension>
</configExtensions>
<configs>
<config>conf/spring/applicationContext.xml</config>
</configs>
<configSets>
</configSets>
</beansProjectDescription>
|
このコンテキスト設定ファイルに Quartz の設定を書く。
applicationContext.xml
このファイルは /conf/spring/ に配置。
ジョブクラスは、例えばこんな感じで。
com.foo.job.SampleJob?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-
|
-
|
!
|
-
|
-
!
|
|
-
!
|
!
|
!
| package com.foo.job;
import java.sql.Timestamp;
import java.util.Map;
import java.util.Set;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class SampleJob extends QuartzJobBean {
public void executeInternal(JobExecutionContext jobExecutionContext)
throws JobExecutionException {
SchedulerContext sc = jobExecutionContext.getScheduler().getContext();
}
}
|
で、サーブレットから起動。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
-
|
-
|
-
!
|
|
|
|
-
!
|
-
!
|
-
!
|
|
|
-
!
|
|
-
!
|
!
|
!
| package com.foo.servlet;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import org.quartz.Scheduler;
import org.quartz.SchedulerContext;
import org.quartz.SchedulerException;
import org.springframework.web.context.WebApplicationContext;
public class SystemInitServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
WebApplicationContext wac =
(WebApplicationContext) config.getServletContext().getAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
);
Scheduler scheduler = (Scheduler) wac.getBean("schedulerFactory");
SchedulerContext sc = scheduler.getContext();
sc.put("hoge", objHoge);
sc.put("fuga", objFuga);
scheduler.start();
}
}
|
参考サイト †
MLEXP. Wiki