2017-02-28 1 views
0

백그라운드에서 작업을 시작하므로 응용 프로그램의 모든 자원을 사용하지 않으며 응용 프로그램의 '정상'작업에 영향을 미칠 수 있습니다. 그것은 실행중인 Java 응용 프로그램 내에서 시작하고 명령 행에서 실행되지 않아야합니다.스프링 배치 작업을 백그라운드 스레드로 시작하는 방법

스프링 스케줄링을 사용하여 백그라운드 작업/데몬으로 Spring 배치 작업을 시작하는 방법을 아는 사람이 있습니까?

+0

스프링 스케줄러 (https://spring.io/guides/gs/scheduling-tasks/)를 사용하여 작업을 예약 할 수 있습니다. 자원 소비에 관해서는 영향을 줄 많은 요소가 있습니다. 메모리가 상대적으로 저렴하기 때문에 필요한 경우 더 많은 메모리를 구입하는 것이 더 나쁜 경우입니다 (즉, 어딘가에서 호스팅되는 경우). – SL07

+0

나는 Spring Scheduler를 사용할 수 있지만 Spring Scheduler가 스레드 우선 순위가 낮은 스레드처럼 실제로 deamon을 생성하는 것은 100 %는 아님을 알고 있습니다. 이것을 검증 할 방법이 있습니까? 또한 특정 사용 사례에서 작업은 실제로 한 번만 실행되어야하며 반복 할 예정이 없어야합니다. – Tranquilized

+0

스프링 스케줄러가 lo 쓰레드 우선 순위로 실행된다는 것을 검증 할 수 없다. 한 번만 실행되는 작업 인 경우 스크립트를 작성하는 것이 더 쉽습니다. Spring 애플리케이션을 사용하여 원하는 조건에 따라 스크립트를 실행할 수 있습니다. – SL07

답변

0

좀 더 조사한 후에 JobLauncher에 대해 TaskExecuter를 구성 할 수 있음을 알게되었습니다. 그런 다음 SimpleAsyncTaskExector를 사용하여 deamon으로 구성하고 스레드 우선 순위를 설정할 수 있습니다.

@Bean 
public JobLauncher jobLauncher(final JobRepository jobRepository, final TaskExecutor taskExecutor) { 

    final SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); 
    jobLauncher.setJobRepository(jobRepository); 
    jobLauncher.setTaskExecutor(taskExecutor); 
    return jobLauncher; 
} 

@Bean 
public TaskExecutor taskExecutor() { 

    SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); 
    taskExecutor.setDaemon(true); 
    taskExecutor.setThreadPriority(Thread.MIN_PRIORITY); 
    return taskExecutor; 
} 
관련 문제