Ich konfiguriere Websockets in Spring grundsätzlich durch Befolgen der Anleitung in der Dokumentation.Konnte nicht automatisch starten. Keine Beans vom SimpMessagingTemplate-Typ gefunden
Ich versuche zur Zeit eine Nachricht vom Server an den Client gesendet werden, wie im Abschnitt „Sending messages from anywhere“
Nach dem Beispiel erklärt, eine Klasse SimpMessagingTemplate
@Controller
public class GreetingController {
private SimpMessagingTemplate template;
@Autowired
public GreetingController(SimpMessagingTemplate template) {
this.template = template;
}
@RequestMapping(value="/greetings", method=POST)
public void greet(String greeting) {
String text = "[" + getTimestamp() + "]:" + greeting;
this.template.convertAndSend("/topic/greetings", text);
}
}
jedoch genannt Autowire kann, Mein aktuelles Projekt kann die Bean "SimpMessagingTemplate" nicht finden. (Intellij: ‚kann nicht autowire Keine Bohnen von SimpMessagingTemplate gefunden Typ‘
prüfe ich habe mehrere Beispiele im Internet, aber ich kann nicht finden, wie Spring bekommt eine Instanz von SimpMessagingTemplate erstellen Wie kann ich es Autowire
..?EDIT:.
ich beschlossen, etwas mehr Hintergrundinformationen senden Dies ist meine aktuelle websocket Konfiguration:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket-4.0.xsd">
<!-- TODO properties to be read from a properties file -->
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/new_session" >
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic"/>
</websocket:message-broker>
</beans>
Websocket arbeitet mit t seine Controller
@Controller
public class SessionController {
private static final Logger log = LoggerFactory.getLogger(SessionController.class);
@MessageMapping("/new_session")
@SendTo("/topic/session")
public SessionStatus newSession(Session session) throws Exception {
Thread.sleep(3000); // simulated delay
log.info("Response sent !!");
return new SessionStatus("StatusReport, " + session.toString() + "!");
}
}
ich nicht nur sicher, wie diese Arbeit zu machen
public class SessionController {
private static final Logger log = LoggerFactory.getLogger(SessionController.class);
private SimpMessagingTemplate template;
@Autowired
public SessionController(SimpMessagingTemplate template) {
this.template = template;
}
}
Als bean "SimpMessagingTemplate Vorlage" nicht gefunden wird. Die Frühjahrsdokumentation bietet hierzu keine weiteren Details.
EDIT: Beispiel für funktionierenden Code in github
Vielen Dank für Ihre Hilfe. Ich habe das Problem gefunden. Ich schrieb einen [Beweis des Codes] (https://github.com/tk421/spring-stomp) und dann merke ich, dass das Problem ist, dass Intellij das @Autowire für SimpMessagingTemplate nicht richtig aufnimmt. Wenn Sie das Programm jetzt ausführen, funktioniert es gut. – Tk421
Konnten Sie das Problem lösen? – plkmthr
@plkmthr Das Problem ist, dass Intelli SimpMessagingTemplate nicht richtig abruft. Wenn Sie es ausführen, wird es funktionieren. Überprüfen Sie den Link zum "Proof of code" – Tk421