Java/Jakarta Project2009. 7. 2. 14:21

자바에서 스케쥴링을 구현하기 위하여 Quartz 패키지를 사용하다가 한가지 문제에 부딛히게 되었다.
JobDetail 클래스의 객체를 생성할 때, 클래스 타입의 파라미터로 작업 클래스를 설정한다는 것이다.
이렇게 되면 작업 클래스의 기본 생성자만 사용이 가능하고 아무런 파라미터도 넘길 수 없다는 뜻인가???
이런 문제를 해결하기 위해서 JobDataMap 이라는 클래스가 존재한다.
JobDataMap을 사용해서 작업 클래스로 파라미터를 넘기기 위해서는 아래와 같이 설정을 한다.


// 기존의 설정
JobDetail jobDetail = new JobDetail("job", "group", TestJob.class);

// JobDataMap을 사용하기 위한 설정
JobDetail jobDetail = new JobDetail("job", "group", TestJob.class);
JobDataMap jobDataMap = jobDetail.getJobDataMap();
jobDataMap.put("name", "Huikyun");
jobDataMap.put("age", 27);



JobDetail 에 작업 클래스로 설정할 클래스는 반드시 Job 인터페이스를 구현하고 있어야 한다.
Job 인터페이스를 구현한 클래스는 반드시 아래의 메소드를 구현해 주어야 하는데
execute 메소드의 파라미터인 JobExecutionContext 클래스의 getJobDetail() 메소드를 이용하면
자신이 등록된 JobDetail 객체를 가지고 올 수 있고 거기서 JobDataMap 객체를 받아오면 파라미터를 사용 가능하다.


public void execute(JobExecutionContext context) throws JobExecutionException {
	JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
	String name = jobDataMap.getString("name");
	int age = jobDataMap.getIntValue("age");
}

Posted by Huikyun