我正在使用CachingConnectionFactory以类似的方式创建JmsTemplate:
@Bean
public JmsTemplate replyJmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(...<CachingConnectionFactory>...);
jmsTemplate.setDeliveryPersistent(...);
jmsTemplate.setExcplicitQosEnabled();
jmsTemplate.setTimeToLive(...);
}
比我在测试类中调用receiveSelected:
replyJmsTemplate.receiveSelected(...);
我在每个测试课中都这样做。当我得到预期的消息时,我的测试结束了,我想要关闭当前的出口流(到队列)。但事实并非如此。我按顺序执行所有测试类(大约70个类),因此我有70个出口流程处于活动状态。在所有测试完成后释放所有出口流。因此,有时我达到最大出口流量,在我的服务器上设置为100。我的问题是如何在每次测试执行后关闭出口流量?我想我可以在测试中手动关闭会话但我无法从jmsTemplate中检索会话。
答案 0 :(得分:3)
由于您提到JmsTemplate
为@Bean
,我可以猜测您在JUnit测试中使用了Spring Testing Framework。为此,您应该考虑在每个测试课程结束后关闭ApplicaitonContext
。 @DirtiesContext
来寻求帮助:
* Test annotation which indicates that the
* {@link org.springframework.context.ApplicationContext ApplicationContext}
* associated with a test is <em>dirty</em> and should therefore be closed
* and removed from the context cache.
答案 1 :(得分:2)
如果每个类都有自己的Spring @Configuration
,请为每个测试类添加@DirtiesContext
- 它将关闭测试应用程序上下文,从而破坏连接工厂。
答案 2 :(得分:0)
最后,我只是使用SingleConnectionFactory,以便在每个测试用例完成之后终止每个会话。