我正在尝试在我的 Spring Boot 应用程序中手动启动/停止 JMS 侦听器。我目前对我的容器工厂使用以下配置:
@EnableJms
public class ConfigJms {
...
@Bean(name = "queueContainerFactory")
public JmsListenerContainerFactory<?> queueContainerFactory(ConnectionFactory cf) {
ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory) cf;
amqCf.setTrustAllPackages(true);
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(amqCf);
**factory.setAutoStartup(false);**
return factory;
}
...
}
Run Code Online (Sandbox Code Playgroud)
测试后factory.setAutoStartup(false);我很困惑,因为即使指示不为这个工厂容器启动任何监听器,监听器已经注册并在上下文启动时启动。
我通过使用jmsListenerEndpointRegistry.
jmsListenerEndpointRegistry.isAutoStartup() is true并
jmsListenerEndpointRegistry. isRunning () is true在执行之前jmsListenerEndpointRegistry.start();
是否需要配置其他东西?也许我忽略了覆盖一些自动配置。
编辑 1:JmsListenerEndpointRegistry 侦听器的无效状态
我在我的豆子中发现了一些不一致的地方:
jmsListenerEndpointRegistry.getListenerContainerIds().size()始终为 0。
jmsListenerEndpointRegistry.isAutoStartup()只是一个 return true 方法。
即使我使用这样的注释注册了几个侦听器:
@JmsListener(containerFactory="queueContainerFactory", destination = "${dest}")
Run Code Online (Sandbox Code Playgroud)
jmsListenerEndpointRegistry不显示有关这些侦听器状态的信息,但它们在启动时已连接到 ActiveMQ。(检查 ActiveMQ 管理控制台)
编辑 2:@JmsListener …
spring ioc-container spring-integration spring-jms spring-boot
我如何将 Spring Boot 应用程序作为 Windows 服务运行,因为我正在关注winsw 的 spring 文档。
脚步:
winsw.1.19.exe.而接下来他们要求更换winsw.exe,以myApp.exe和他们提到我需要修改配置文件安装指南,但我没有收到哪里是哪里,我需要进行更改配置文件。
注意:我的 Spring Boot 应用程序已经作为服务运行,我需要将此服务作为 Windows 服务运行。
我写了一些与使用spring上传文件相关的代码,它运行正常,现在我正在为此编写集成测试用例但我面临一些问题我的控制器方法,
@RequestMapping(value = "/{attributeName}/upload", method = RequestMethod.POST)
@ResponseBody
public Result uploadCompany(HttpServletRequest request,
@RequestParam MultipartFile file, @PathVariable String attributeName,
@RequestParam long dateKey)
throws IOException, PromotionException {
some code
}
Run Code Online (Sandbox Code Playgroud)
测试用例
@Test
public void shouldReturnTrueStatusWhenUploadCompany() throws Exception {
MockMultipartFile file = new MockMultipartFile("company_upload", "company_upload.csv",
MediaType.MULTIPART_FORM_DATA_VALUE, EMPLOYEE_NUMBER_FILE_CONTENT.getBytes(UTF_8));
mockMvc.perform(
MockMvcRequestBuilders.fileUpload(
PROMOTION + StringUtils.replace(ATTRIBUTE_NAME, "{attributeName}", "COMPANY") + "/upload")
.file(file).param("dateKey", "852017") .contentType(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
Run Code Online (Sandbox Code Playgroud)
但我得到了
2017-05-09 13:42:42,506 ERROR [Test worker] INTERNAL_SERVER_ERROR:
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
我不确定什么时候打电话RedisLockRegistry.obtain(String lockKey)(或者,更一般地说,LockRegistry.obtain(String lockKey))。我应该在应用程序开始时只获得一次锁,然后像往常一样锁定/解锁它,还是应该在每次调用 lock 之前(在我使用它之前)获得一个锁?
目前我正在使用后一个选项,但是,我不确定这是否真的有必要。
我正在尝试编写集成测试。我想使用本地堆栈来启动一个模拟 AWS 服务的 docker 容器。
此代码将启动 docker 容器,但不会自动装配来自我的 spring 应用程序的类。
@RunWith(LocalstackTestRunner.class)
@LocalstackDockerProperties(services = {"dynamodb","sns"})
@ActiveProfiles("test")
@SpringBootTest(classes = {TestApplication.class})
public class FlowTest {
@Autowired
private PublisherFactory publisherFactory;
@Test
public void publishMessage() {
// publisherFactory is null here
Publisher publisher = publisherFactory.getInstance("test-event");
}
}
Run Code Online (Sandbox Code Playgroud)
此代码将从我的应用程序自动装配类,但不会启动 Docker 容器
@RunWith(SpringRunner.class)
@LocalstackDockerProperties(services = {"dynamodb","sns"})
@ActiveProfiles("test")
@SpringBootTest(classes = {TestApplication.class})
public class FlowTest {
@Autowired
private PublisherFactory publisherFactory;
@Test
public void publishMessage() {
//publisher not null here but Docker container not running
Publisher publisher = publisherFactory.getInstance("test-event");
} …Run Code Online (Sandbox Code Playgroud) java spring spring-integration amazon-web-services localstack
我使用Spring boot和RabbitMQ为多个生产者和消费者开发了一个应用程序.应用程序工作正常没有任何问题,但我仍然想进行单元测试和集成测试.我浏览谷歌但没有运气没有得到坚实的用例来测试Spring boot和rabbitMQ在一起.
所以我想知道哪种工具最适合测试Spring Boot和RabbitMQ(至少有一个如何编写测试用例的提示是可观的)?我看到类似的stackoverflow帖子,但没有得到解决方案.你的帮助应该感激.
spring ×4
spring-boot ×3
java ×2
spring-mvc ×2
localstack ×1
locking ×1
rabbitmq ×1
spring-jms ×1