所以我有一個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()'的能力。 –