我想将Spring 4.1中提供的新注释和功能用于需要JMS侦听器的应用程序.
我仔细阅读了Spring 4.1 JMS改进帖子中的注释,但我仍然错过了我和设置应用程序之间的关系@JmsListener,DestinationResolver以及如何指示正确的Destination或Endpoint.
以下是@JmsListener的建议用法
@Component
public class MyService {
@JmsListener(containerFactory = "myContainerFactory", destination = "myQueue")
public void processOrder(String data) { ... }
}
Run Code Online (Sandbox Code Playgroud)
现在,我不能在我的实际代码中使用它,因为需要使用配置文件读取"myQueue" Environment.getProperty().
我可以设置一个合适的myContainerFactory DestinationResolver但主要是,DynamicDestinationResolver如果你不需要JNDI来查找app服务器中的队列而不需要做一些自定义的回复逻辑,你似乎只会使用它.我只是想了解Spring如何使用@JmsListener注释以参数化方式指示队列的名称.
在博客文章的下方,我找到了对此Configurer的引用:
@Configuration
@EnableJms
public class AppConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
registrar.setDefaultContainerFactory(defaultContainerFactory());
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setDestination("anotherQueue");
endpoint.setMessageListener(message -> {
// processing
});
registrar.registerEndpoint(endpoint);
}
Run Code Online (Sandbox Code Playgroud)
现在,这使得感一定量的,我可以看到,这将让我设定在一些外部串运行一个目标,但是这似乎是在冲突中使用@JmsListener,因为它似乎是压倒一切赞成注释endpoint.setMessageListener中上面的代码. …
通常,我的 POM 文件工作正常,所有单元测试都通过,所有工件都正确打包。但是,一旦我添加了这个 maven-resources-plugin 来根据配置文件创建特定的配置,我的所有测试都会失败,因为“src/test/resources”中的任何内容都没有被复制到“test-classes”:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${project.build.directory}/${config.dir}/${project.activeProfiles[1].id}</outputDirectory>
<resources>
<filtering>true</filtering>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这会阻止测试资源的复制。有任何想法吗?
我有一个大的应用程序作用域内容缓冲区,我想保留在内存中.使用Omnifaces让我们很容易做到这一点.
但是,如果我需要使缓存过期,似乎没有方法可以这样做.如果需要,我可以设置时间属性,但这似乎并不是这个难题的理想答案.
有关强制更新基础数据的任何建议吗?
谢谢,
Temar