所以我有一个Runnable类,应该在符合某个条件时调用notifyUser(String username,String content)方法。我一直试图让这个工作,但它总是失败与NullPointerExceptions。这很可能会导致Autowiring失败(因为Runnable类不是由Spring管理的)。在Spring管理的上下文中自动装配SimpMessagingTemplate工作得很好,这些方法完成了他们应该做的事情。用Spring Websockets发送消息给特定的客户端
我想要做的是调用SimpMessagingTemplate的方法(或类似的方法)convertAndSendToUser,但是我不能在这种情况下自动调用它。到目前为止,我所尝试过的一切都失败了,这就是为什么我认为我的一些基本概念错了。
我的配置是这样的:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/test");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/test").withSockJS();
}
}
更新:我已经通过使用下面的代码设法摆脱NullPointerException异常..但消息(convertAndSendToUser()以及convertAndSend())唐客户不会接受。开发者控制台不显示任何传入消息。
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(Application.class);
ctx.getAutowireCapableBeanFactory().autowireBean(myService);
嗯,我genereally可能应该集中精力使螺纹春季管理,而不是与解决方法过于复杂的事情呢。你能指出我如何开始弹簧管理线程的正确方向吗?据我所知,我需要通过上下文将线程作为一个bean来启动,并使用ThreadPoolTaskExecutor启动它,但是在哪里以及如何定义该Thread bean? – Lukehey
你应该让你的'Runnable'由Spring和'@ Autowire'来管理你想要的一切。这个也可以是“原型”。初始者也应该被管理,以便为'Runnable'提供'ctx.getBean()'的能力。 –