[SPRING] XML 스프링 스케줄링 설정에서 주석 / 코드 설정으로 이동하는 방법?
SPRINGXML 스프링 스케줄링 설정에서 주석 / 코드 설정으로 이동하는 방법?
다음 Spring 작업 xml 구성을 순전히 코드 / 주석 기반 버전으로 변환하려고합니다.
<task:executor id="xyz.executor"
pool-size="${xyz.job.executor.pool.size:1-40}"
queue-capacity="${xyz.job.executor.queue.capacity:0}"
rejection-policy="CALLER_RUNS"/>
<task:scheduler id="xyz.scheduler" pool size="${xyz.job.scheduler.pool.size:4}" />
<task:annotation-driven executor="xyz.executor" scheduler="xyz.scheduler" />
<bean id='xyzProcessor' class="xyz.queueing.QueueProcessor" />
<task:scheduled-tasks scheduler="xyz.scheduler" >
<task:scheduled ref="partitioner" method="createPartitions" cron="${xyz.job.partitioner.interval:0 0 3 * * *}" />
</task:scheduled-tasks>
Spring 스펙 28.4.1 (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html)에 따르면, 그들은 XML에서 다음과 같이 이동한다고 말한다 :
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>
코드 구성은 @EnableScheduling 및 / 또는 @EnableAsync를 활성화하는 것과 같습니다.
그러나 실제로 어디서나 스케줄러를 인스턴스화 할 수는 없습니다. @EnableScheduling (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html)에 대한 javadoc은 내가 만든 Executor를 어떻게 플러그인 할 수 있는지 보여줍니다. 어떤 클래스가되어야하는지 확실히 모르겠지만 (여전히 풀 크기, 대기열 용량 및 거부 정책을 제어 할 수 있기를 원합니다). 또한 configureTasks 재정의를 사용하여 createPartitions 메소드를 예약하는 방법을 보여줍니다. 그러나, 나는 (그래서 나는 그 스레드를 식별 할 수 있습니다) 내 스케줄러 이름을 지정하고 풀 크기를 제어 할 수 싶습니다.
그래서 나는이 것들을 알고 싶다 :
1) XML이 가지고있는 Executor 필드를 설정하기 위해 어떤 클래스를 사용할 수 있습니까?
2) 내가 이름과 풀 크기를 제어 할 수있는 스케줄러 인스턴스를 만드는 방법이 있습니까?
해결법
-
==============================
1.AsyncConfigurer, AsyncConfigurerSupport 및 SchedulingConfigurer 유형을 확인하십시오. 비동기 / 스케줄링 구성으로 @Configuration 클래스를 향상시키는 데 사용할 수있는 도우미 유형입니다.
AsyncConfigurer, AsyncConfigurerSupport 및 SchedulingConfigurer 유형을 확인하십시오. 비동기 / 스케줄링 구성으로 @Configuration 클래스를 향상시키는 데 사용할 수있는 도우미 유형입니다.
이들 모두와 @EnabledAsync의 javadoc을 통해 비동기 / 스케줄 @Configuration 클래스를 설정하는 데 필요한 모든 설정 방법을 찾을 수 있습니다.
주어진 예제는 같음
@Configuration @EnableAsync public class AppConfig implements AsyncConfigurer { @Bean public MyAsyncBean asyncBean() { return new MyAsyncBean(); } @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(7); executor.setMaxPoolSize(42); executor.setQueueCapacity(11); executor.setThreadNamePrefix("MyExecutor-"); executor.initialize(); return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new MyAsyncUncaughtExceptionHandler(); } }
와
<beans> <task:annotation-driven executor="myExecutor" exception-handler="exceptionHandler"/> <task:executor id="myExecutor" pool-size="7-42" queue-capacity="11"/> <bean id="asyncBean" class="com.foo.MyAsyncBean"/> <bean id="exceptionHandler" class="com.foo.MyAsyncUncaughtExceptionHandler"/> </beans>
SchedulingConfigurer에는 작업 : scheduler에 대한 비슷한 설정이 있습니다.
-
==============================
2.더 세분화 된 제어를 원하면 SchedulingConfigurer 및 / 또는 AsyncConfigurer 인터페이스를 추가로 구현할 수 있습니다.
더 세분화 된 제어를 원하면 SchedulingConfigurer 및 / 또는 AsyncConfigurer 인터페이스를 추가로 구현할 수 있습니다.
다음과 같이,
수영장도 보시고,
@Configuration @EnableScheduling public class CronConfig implements SchedulingConfigurer{ @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean(destroyMethod="shutdown") public Executor taskExecutor() { return Executors.newScheduledThreadPool(10); } }
그리고 비동기를 위해서,
@Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); executor.setQueueCapacity(100); executor.initialize(); return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new SimpleAsyncUncaughtExceptionHandler(); } }
이 기능을 사용하려면 @EnableAsync 및 @EnableScheduling이 있어야합니다.
from https://stackoverflow.com/questions/27970650/how-to-go-from-xml-spring-scheduling-configuration-to-annotation-code-configurat by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC에서 정확한 클라이언트 브라우저 이름과 버전을 얻는 방법은 무엇입니까? (0) | 2019.03.12 |
---|---|
[SPRING] Spring bean 정의를 오버라이드하는 방법은 무엇입니까? (0) | 2019.03.12 |
[SPRING] 루트 컨텍스트와 디스패처 서블릿 컨텍스트가 Spring MVC 웹 애플리케이션과 정확히 얼마나 일치합니까? (0) | 2019.03.05 |
[SPRING] HTTPS / HTTP 포트를 실행하기 위해 Spring Boot를 설정하는 방법 (0) | 2019.03.05 |
[SPRING] 스프링 데이터 JPA에서 LazyInitializationException을 해결하는 방법? (0) | 2019.03.05 |