INT-736 Added support for the 'scheduler' reference.
This commit is contained in:
@@ -39,7 +39,7 @@ public class DelayerParser extends AbstractConsumerEndpointParser {
|
||||
parserContext.getReaderContext().error("The 'default-delay' attribute is required.", element);
|
||||
return null;
|
||||
}
|
||||
builder.getBeanDefinition().getConstructorArgumentValues().addIndexedArgumentValue(0, defaultDelay);
|
||||
builder.addConstructorArgValue(defaultDelay);
|
||||
String scheduler = element.getAttribute("scheduler");
|
||||
if (StringUtils.hasText(scheduler)) {
|
||||
builder.addConstructorArgReference(scheduler);
|
||||
|
||||
@@ -597,6 +597,21 @@
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="scheduler" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Provide a reference to the ScheduledExecutorService instance to which this endpoint should
|
||||
delegate when scheduling the sending of delayed Messages. If not provided, the default
|
||||
will use a thread pool of size 1.
|
||||
</xsd:documentation>
|
||||
<xsd:appinfo>
|
||||
<tool:annotation kind="ref">
|
||||
<tool:expected-type
|
||||
type="java.util.concurrent.ScheduledExecutorService" />
|
||||
</tool:annotation>
|
||||
</xsd:appinfo>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="send-timeout" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<queue />
|
||||
</channel>
|
||||
|
||||
<delayer id="delayer"
|
||||
<delayer id="delayerWithDefaultScheduler"
|
||||
input-channel="input"
|
||||
output-channel="output"
|
||||
default-delay="1234"
|
||||
@@ -22,4 +22,14 @@
|
||||
send-timeout="987"
|
||||
wait-for-tasks-to-complete-on-shutdown="true"/>
|
||||
|
||||
<delayer id="delayerWithCustomScheduler"
|
||||
input-channel="input"
|
||||
output-channel="output"
|
||||
default-delay="0"
|
||||
scheduler="testScheduler"/>
|
||||
|
||||
<beans:bean id="testScheduler" class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
|
||||
<beans:property name="poolSize" value="7"/>
|
||||
</beans:bean>
|
||||
|
||||
</beans:beans>
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.integration.endpoint.EventDrivenConsumer;
|
||||
import org.springframework.integration.handler.DelayHandler;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
@@ -42,8 +43,8 @@ public class DelayerParserTests {
|
||||
|
||||
|
||||
@Test
|
||||
public void checkConfiguration() {
|
||||
Object endpoint = context.getBean("delayer");
|
||||
public void defaultScheduler() {
|
||||
Object endpoint = context.getBean("delayerWithDefaultScheduler");
|
||||
assertEquals(EventDrivenConsumer.class, endpoint.getClass());
|
||||
Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler");
|
||||
assertEquals(DelayHandler.class, handler.getClass());
|
||||
@@ -58,4 +59,19 @@ public class DelayerParserTests {
|
||||
assertEquals(Boolean.TRUE, accessor.getPropertyValue("waitForTasksToCompleteOnShutdown"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void customScheduler() {
|
||||
Object endpoint = context.getBean("delayerWithCustomScheduler");
|
||||
assertEquals(EventDrivenConsumer.class, endpoint.getClass());
|
||||
Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler");
|
||||
assertEquals(DelayHandler.class, handler.getClass());
|
||||
DelayHandler delayHandler = (DelayHandler) handler;
|
||||
assertEquals(Ordered.LOWEST_PRECEDENCE, delayHandler.getOrder());
|
||||
DirectFieldAccessor accessor = new DirectFieldAccessor(delayHandler);
|
||||
assertEquals(context.getBean("output"), accessor.getPropertyValue("outputChannel"));
|
||||
assertEquals(new Long(0), accessor.getPropertyValue("defaultDelay"));
|
||||
assertEquals(context.getBean("testScheduler"), accessor.getPropertyValue("scheduler"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user