Quartz
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Quartz [#t466b389]
下記サイトのチュートリアルあたりが参考になるはず。
- [[Quartz - opensymphony:http://www.opensymphony.com/qua...
** 小技など [#yf66d9b3]
*** コンテキスト設定ファイルで設定してみる [#vf206bd3]
まず struts.xml に struts.objectFactory を spring で設定...
''struts.xml''(一部)
#code(HTML){{
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" va...
}}
ここは名前一致で。型一致(value="type")でいけるかどうか...
quartz.properties を書く。
Quartz のセットの中にサンプルがあるので、必要な部分のコメ...
#code(){{
#========================================================...
# Configure Main Scheduler Properties
#========================================================...
#org.quartz.scheduler.instanceName = TestScheduler
#org.quartz.scheduler.instanceId = AUTO
#========================================================...
# Configure ThreadPool
#========================================================...
org.quartz.threadPool.class = org.quartz.simpl.SimpleThre...
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...
#org.quartz.jobStore.driverDelegateClass = org.quartz.imp...
#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://local...
#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.plugin...
#org.quartz.plugin.jobInitializer.class = org.quartz.plug...
#org.quartz.plugin.jobInitializer.fileNames = jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs =...
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 10
#org.quartz.plugin.jobInitializer.wrapInUserTransaction =...
}}
プロジェクト直下に .springBeans というファイルを配置。
以下のように書く。
''.springBeans''
#code(HTML){{
<?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''
#code(HTML){{
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
default-autowire="autodetect"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring...
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-a...
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-...
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx...
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-j...
<!-- Web アプリの設定諸々 ここから -->
<!-- Web アプリの設定諸々 ここまで -->
<!-- Quartz の設定 ここから -->
<!-- 処理を実行するクラス -->
<bean id="sampleJob" class="com.foo.job.SampleJob" scope...
<!-- このクラスで使用するオブジェクトたち -->
<property name="object1" ref="object1"/>
<property name="object2" ref="object2"/>
</bean>
<!-- Quartz で呼び出されるクラス -->
<bean id="sampleJobDetail"
class="org.springframework.scheduling.quartz.JobDetailB...
<property name="jobClass" value="com.foo.job.sampleJob"...
<property name="jobDataAsMap">
<map>
<!-- このクラスに渡すオブジェクトたち -->
<entry key="argumentObject1"><ref bean="argumentObjec...
<entry key="argumentObject2"><ref bean="argumentObjec...
</map>
</property>
<!-- リスナ -->
<property name="jobListenerNames">
<list>
<value>sampleJobListener</value>
</list>
</property>
</bean>
<!-- トリガの設定 -->
<bean id="sampleJobTrigger"
class="org.springframework.scheduling.quartz.CronTrigge...
<!-- Quartz で呼び出されるクラス -->
<property name="jobDetail" ref="sampleJobDetail" />
<!-- 例えば、毎日AM1:00に実行の場合 -->
<property name="cronExpression" value="0 0 1 * * ?" />
</bean>
<!-- リスナ -->
<!-- 複数処理がある場合に起動順序をここで設定する。
<bean id="sampleJobListener" class="com.foo.job.SampleJo...
<property name="jobChainLinkList">
<list>
<ref bean="sampleJobDetail" />
</list>
</property>
</bean>
-->
<!-- 排他制御の設定 -->
<!-- 重複起動を抑制する bean の id を指定する。
<bean id="triggerListener" class="com.foo.job.TriggerLis...
<property name="listenerName" value="exclusiveTriggerLi...
<property name="controlJobName">
<set>
<value>sampleJobDetail</value>
</set>
</property>
</bean>
-->
<!-- ファクトリの定義 -->
<!--
autowire の設定は struts.xml と揃える。
-->
<bean id="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerF...
<property name="triggers">
<list>
<!-- 起動対象のトリガを書く -->
<ref bean="sampleJobTrigger" />
</list>
</property>
<property name="configLocation">
<value>classpath:/conf/quartz/quartz.properties</value>
</property>
<property name="jobDetails">
<list>
<ref bean="sampleJobDetail" />
</list>
</property>
<property name="dataSource">
<!-- RAMJobStore を使用するので null -->
<null />
</property>
<property name="autoStartup">
<value>false</value>
</property>
<!--
<property name="globalTriggerListeners">
<list>
<ref bean="triggerListener" />
</list>
</property>
<property name="jobListeners">
<list>
<ref bean="sampleJobListener" />
</list>
</property>
-->
</bean>
</beans>
}}
このファイルは /conf/spring/ に配置。
ジョブクラスは、例えばこんな感じで。
''com.foo.job.SampleJob''
#code(Java){{
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 jobExecu...
throws JobExecutionException {
// スケジューラのコンテキストを取得する。
SchedulerContext sc = jobExecutionContext.getScheduler(...
// ここで定期的に実行したい処理を書く。
}
}
}}
で、サーブレットから起動。
#code(Java){{
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.WebApplicationCont...
public class SystemInitServlet implements Servlet {
public void init(ServletConfig config) throws ServletExc...
// Web アプリケーションのコンテキストを取得する。
WebApplicationContext wac =
(WebApplicationContext) config.getServletContext().ge...
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_A...
);
// スケジューラを取得する。
Scheduler scheduler = (Scheduler) wac.getBean("schedule...
// スケジューラのコンテキストを取得する。
SchedulerContext sc = scheduler.getContext();
// 必要な設定を追加する。
sc.put("hoge", objHoge);
sc.put("fuga", objFuga);
// スケジューラを開始する。
scheduler.start();
// その他、ジョブ以外のWebアプリ初期化処理。
}
}
}}
** 参考サイト [#qacb3708]
- [[naritocの日記:http://d.hatena.ne.jp/naritoc/searchdia...
-----
[[MLEXP. Wiki]]
#googleads(1,1)
終了行:
* Quartz [#t466b389]
下記サイトのチュートリアルあたりが参考になるはず。
- [[Quartz - opensymphony:http://www.opensymphony.com/qua...
** 小技など [#yf66d9b3]
*** コンテキスト設定ファイルで設定してみる [#vf206bd3]
まず struts.xml に struts.objectFactory を spring で設定...
''struts.xml''(一部)
#code(HTML){{
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" va...
}}
ここは名前一致で。型一致(value="type")でいけるかどうか...
quartz.properties を書く。
Quartz のセットの中にサンプルがあるので、必要な部分のコメ...
#code(){{
#========================================================...
# Configure Main Scheduler Properties
#========================================================...
#org.quartz.scheduler.instanceName = TestScheduler
#org.quartz.scheduler.instanceId = AUTO
#========================================================...
# Configure ThreadPool
#========================================================...
org.quartz.threadPool.class = org.quartz.simpl.SimpleThre...
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...
#org.quartz.jobStore.driverDelegateClass = org.quartz.imp...
#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://local...
#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.plugin...
#org.quartz.plugin.jobInitializer.class = org.quartz.plug...
#org.quartz.plugin.jobInitializer.fileNames = jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs =...
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 10
#org.quartz.plugin.jobInitializer.wrapInUserTransaction =...
}}
プロジェクト直下に .springBeans というファイルを配置。
以下のように書く。
''.springBeans''
#code(HTML){{
<?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''
#code(HTML){{
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
default-autowire="autodetect"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring...
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-a...
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-...
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx...
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-j...
<!-- Web アプリの設定諸々 ここから -->
<!-- Web アプリの設定諸々 ここまで -->
<!-- Quartz の設定 ここから -->
<!-- 処理を実行するクラス -->
<bean id="sampleJob" class="com.foo.job.SampleJob" scope...
<!-- このクラスで使用するオブジェクトたち -->
<property name="object1" ref="object1"/>
<property name="object2" ref="object2"/>
</bean>
<!-- Quartz で呼び出されるクラス -->
<bean id="sampleJobDetail"
class="org.springframework.scheduling.quartz.JobDetailB...
<property name="jobClass" value="com.foo.job.sampleJob"...
<property name="jobDataAsMap">
<map>
<!-- このクラスに渡すオブジェクトたち -->
<entry key="argumentObject1"><ref bean="argumentObjec...
<entry key="argumentObject2"><ref bean="argumentObjec...
</map>
</property>
<!-- リスナ -->
<property name="jobListenerNames">
<list>
<value>sampleJobListener</value>
</list>
</property>
</bean>
<!-- トリガの設定 -->
<bean id="sampleJobTrigger"
class="org.springframework.scheduling.quartz.CronTrigge...
<!-- Quartz で呼び出されるクラス -->
<property name="jobDetail" ref="sampleJobDetail" />
<!-- 例えば、毎日AM1:00に実行の場合 -->
<property name="cronExpression" value="0 0 1 * * ?" />
</bean>
<!-- リスナ -->
<!-- 複数処理がある場合に起動順序をここで設定する。
<bean id="sampleJobListener" class="com.foo.job.SampleJo...
<property name="jobChainLinkList">
<list>
<ref bean="sampleJobDetail" />
</list>
</property>
</bean>
-->
<!-- 排他制御の設定 -->
<!-- 重複起動を抑制する bean の id を指定する。
<bean id="triggerListener" class="com.foo.job.TriggerLis...
<property name="listenerName" value="exclusiveTriggerLi...
<property name="controlJobName">
<set>
<value>sampleJobDetail</value>
</set>
</property>
</bean>
-->
<!-- ファクトリの定義 -->
<!--
autowire の設定は struts.xml と揃える。
-->
<bean id="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerF...
<property name="triggers">
<list>
<!-- 起動対象のトリガを書く -->
<ref bean="sampleJobTrigger" />
</list>
</property>
<property name="configLocation">
<value>classpath:/conf/quartz/quartz.properties</value>
</property>
<property name="jobDetails">
<list>
<ref bean="sampleJobDetail" />
</list>
</property>
<property name="dataSource">
<!-- RAMJobStore を使用するので null -->
<null />
</property>
<property name="autoStartup">
<value>false</value>
</property>
<!--
<property name="globalTriggerListeners">
<list>
<ref bean="triggerListener" />
</list>
</property>
<property name="jobListeners">
<list>
<ref bean="sampleJobListener" />
</list>
</property>
-->
</bean>
</beans>
}}
このファイルは /conf/spring/ に配置。
ジョブクラスは、例えばこんな感じで。
''com.foo.job.SampleJob''
#code(Java){{
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 jobExecu...
throws JobExecutionException {
// スケジューラのコンテキストを取得する。
SchedulerContext sc = jobExecutionContext.getScheduler(...
// ここで定期的に実行したい処理を書く。
}
}
}}
で、サーブレットから起動。
#code(Java){{
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.WebApplicationCont...
public class SystemInitServlet implements Servlet {
public void init(ServletConfig config) throws ServletExc...
// Web アプリケーションのコンテキストを取得する。
WebApplicationContext wac =
(WebApplicationContext) config.getServletContext().ge...
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_A...
);
// スケジューラを取得する。
Scheduler scheduler = (Scheduler) wac.getBean("schedule...
// スケジューラのコンテキストを取得する。
SchedulerContext sc = scheduler.getContext();
// 必要な設定を追加する。
sc.put("hoge", objHoge);
sc.put("fuga", objFuga);
// スケジューラを開始する。
scheduler.start();
// その他、ジョブ以外のWebアプリ初期化処理。
}
}
}}
** 参考サイト [#qacb3708]
- [[naritocの日記:http://d.hatena.ne.jp/naritoc/searchdia...
-----
[[MLEXP. Wiki]]
#googleads(1,1)
ページ名: