2009年10月23日金曜日

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングする

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングするには、以下のコードを実行します。

ジョブコード(HelloQuartzJob.groovy)

import org.quartz.*

class HelloQuartzJob implements Job
{
// ジョブ実行メソッド
void execute(JobExecutionContext context)
throws JobExecutionException
{
println("Hello, Quartz!" + new Date())
}
}


quartz設定ファイル(myquartz.properties)

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
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false


quartzスタンドアロン実行用コード(StartQuartz.groovy)(exitと入力すると終了する)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
//sched = sf.getScheduler()

// スケジューラを開始
//sched.start();

server = new QuartzServer()
server.serve(sf, true)


ジョブスケジューリング用コード(RegisterHelloQuartzJob.groovy)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ定義
JobDetail job = new JobDetail(
// ジョブ名
"job1",
// グループ名
"group1",
// ジョブクラス
HelloQuartzJob.class
)

// cron風のtrigger
trigger = new CronTrigger(
// トリガー名
"trigger1",
// グループ名
"group1",
// ジョブ名
"job1",
// グループ名
"group1",
// 月曜日から金曜日の21時
"0 0 21 ? * MON-FRI");
sched.scheduleJob(job, trigger)

sched.shutdown(true)


実行するときは、コマンドプロンプトから
groovy StartQuartz.groovyでスタンドアロンで実行させ、
別のコマンドプロンプトからgroovy RegisterHelloQuartzJob.groovyで
ジョブを登録します。

0 件のコメント:

コメントを投稿