Home > 2009年07月

2009年07月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • Comments (Close): -
  • TrackBack (Close): -

Springでタイマー処理

take©です。定期的に処理を実行したい場合、Linuxであればcronが定番ですが、Javaで構築する場合、やっぱりプラットフォームに依存しない方法をとりたいものです。

Javaではタイマー処理を行うために以下のクラスが用意されています。

  • java.util.Timer
  • java.util.concurrent.ScheduledExecutorService

今回はSpringからjava.util.concurrent.ScheduledExecutorServiceを使って5秒ごとに「Hello!」を出力してみます。

HelloTask.java
package sample;

import java.util.concurrent.TimeUnit;
import org.springframework.scheduling.concurrent.ScheduledExecutorTask;

public class HelloTask extends ScheduledExecutorTask implements Runnable {
	public HelloTask() {
		setTimeUnit(TimeUnit.SECONDS);
		setPeriod(5);
		setRunnable(this);
	}
	
	public void run() {
		System.out.println("Hello!");
	}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	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-2.5.xsd">

	<bean id="helloTaskExecutor" class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
		<property name="scheduledExecutorTasks">
			<list>
				<ref bean="helloTask" />
			</list>
		</property>
	</bean>
	
	<bean id="helloTask" class="sample.HelloTask"/>
	
</beans>
Main.java
package sample;

import java.util.concurrent.ScheduledExecutorService;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) throws InterruptedException {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		Thread.sleep(30000);
		
		ScheduledExecutorService helloTaskExecutor = (ScheduledExecutorService) context.getBean("helloTaskExecutor");
		helloTaskExecutor.shutdown();
	}
}

Main.javaを実行すると、5秒おきに「Hello!」が出力され、30秒後にプログラムが終了するようになっています。 もっと高度なタイマー処理を行う場合は、Quartzを使う方法が良いでしょう。

Home > 2009年07月

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。