diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/annotation/Poller.java b/org.springframework.integration/src/main/java/org/springframework/integration/annotation/Poller.java index e37705841a..258e164576 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/annotation/Poller.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/annotation/Poller.java @@ -49,6 +49,8 @@ public @interface Poller { int maxMessagesPerPoll() default -1; + String taskExecutor() default ""; + Transactional transactionAttributes() default @Transactional; String transactionManager() default ""; diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/AnnotationConfigUtils.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/AnnotationConfigUtils.java index 490dae08a8..d08d8e5501 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/AnnotationConfigUtils.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/AnnotationConfigUtils.java @@ -22,6 +22,7 @@ import java.util.List; import org.aopalliance.aop.Advice; import org.springframework.beans.factory.BeanFactory; +import org.springframework.core.task.TaskExecutor; import org.springframework.integration.annotation.Poller; import org.springframework.integration.endpoint.AbstractPollingEndpoint; import org.springframework.integration.scheduling.IntervalTrigger; @@ -57,6 +58,13 @@ public abstract class AnnotationConfigUtils { Transactional txAnnotation = pollerAnnotation.transactionAttributes(); endpoint.setTransactionDefinition(parseTransactionAnnotation(txAnnotation)); } + if (StringUtils.hasText(pollerAnnotation.taskExecutor())) { + String taskExecutorRef = pollerAnnotation.taskExecutor(); + Assert.isTrue(beanFactory.containsBean(taskExecutorRef), + "failed to resolve taskExecutor reference, no such bean '" + taskExecutorRef + "'"); + TaskExecutor taskExecutor = (TaskExecutor) beanFactory.getBean(taskExecutorRef, TaskExecutor.class); + endpoint.setTaskExecutor(taskExecutor); + } String[] adviceChainArray = pollerAnnotation.adviceChain(); if (adviceChainArray.length > 0) { List adviceChain = new ArrayList();