나는 이들 중 아무 것도 시도하지 않았지만 시도해 볼 가치가 있습니다.
1) Quartz camel endpoint을 사용해보십시오. 아파치 낙타는 나의 이해가 옳다면 즉시 낙타 루트를 만들 수 있습니다. 필요한 클래스가 이미 컨테이너의 클래스 경로에서 사용 가능할 것이라는 점을 고려하여 camel-context.xml을 컨테이너에 배치하기 만하면됩니다.
2) Quartz를 사용하면 작업 및 트리거의 xml 구성으로 선언적으로 작업을 만들 수 있습니다. 자세한 내용은 here을 참조하십시오.
3) 지금 이것은 어떤 노력 ;-)
당신이 작업의 일환으로 실행하는 방법이있는 인터페이스를 작성해야합니다. 이 메서드는
public interface MyDynamicJob
{
public void executeThisAsPartOfJob();
}
이라는 메서드가 있습니다. 작업 메서드의 인스턴스를 만듭니다.
public EmailJob implements MyDynamicJob
{
@Override
public void executeThisAsPartOfJob()
{
System.out.println("Sending Email");
}
}
이제 메인 스케줄러 엔진에서 Observer 패턴을 사용하여 작업을 동적으로 저장/초기화하십시오. 뭔가 같은 사실
HashMap jobs=new HashMap<String,MyDynamicJob>();
// call this method to add the job dynamically.
// If you add a job after the scheduler engine started , find a way here how to reiterate over this map without shutting down the scheduler :-).
public void addJob(String someJobName,MyDynamicJob job)
{
jobs.add(someJobName,job);
}
public void initiateScheduler()
{
// Iterate over the jobs map to get all registered jobs. Create
// Create JobDetail instances dynamically for each job Entry. add your custom job class as a part of job data map.
Job jd1=JobBuilder.newJob(GenericJob.class)
.withIdentity("FirstJob", "First Group").build();
Map jobDataMap=jd1.getJobDataMap();
jobDataMap.put("dynamicjob", jobs.get("dynamicjob1"));
}
public class GenericJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Executing job");
Map jdm=arg0.getJobDetail().getJobDataMap();
MyDynamicJob mdj=jdm.get("dynamicjob");
// Now execute your custom job method here.
mdj.executeThisAsPartOfJob();
System.out.println("Job Execution complete");
}
}
, 당신은 적어도 썬/오라클의 JDK를 사용하여 컴파일 된 클래스를 즉석에서 자바 파일을 컴파일하고 인스턴스화 할 수 있습니다. – fge