Testklasse: -
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { WebsocketSourceConfiguration.class,
WebSocketSourceIntegrationTests.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {
"websocket.path=/some_websocket_path", "websocket.allowedOrigins=*",
"spring.cloud.stream.default-binder=kafka" })
public class WebSocketSourceIntegrationTests {
private String port = "8080";
@Test
public void testWebSocketStreamSource() throws IOException, InterruptedException {
StandardWebSocketClient webSocketClient = new StandardWebSocketClient();
ClientWebSocketContainer clientWebSocketContainer = new ClientWebSocketContainer(webSocketClient,
"ws://localhost:" + port + "/some_websocket_path");
clientWebSocketContainer.start();
WebSocketSession session = clientWebSocketContainer.getSession(null);
session.sendMessage(new TextMessage("foo"));
System.out.println("Done****************************************************");
}
}
Ich habe dieselbe Ausgabe gesehen hier , aber nichts half mir. Kann ich wissen, was mir fehlt?
Ich habe spring-boot-starter-Tomcat
als Kompilierzeitabhängigkeit in der Abhängigkeitshierarchie.
Diese Meldung besagt: Sie müssen mindestens 1 ServletWebServerFactory-Bean im ApplicationContext konfigurieren, wenn Sie also bereits Spring-Boot-Starter-Tomcat haben , benötigen Sie um diese Bean entweder automatisch zu konfigurieren oder manuell zu konfigurieren .
Im Test gibt es also nur 2 Konfigurationsklassen, um den applicationContext zu laden. Diese sind = {WebsocketSourceConfiguration.class, WebSocketSourceIntegrationTests.class}. Dann sollte mindestens in einer dieser Klassen eine @ Bean-Methode vorhanden sein, die eine Instanz der gewünschten zurückgibt ServletWebServerFactory.
* LÖSUNG *
Stellen Sie sicher, dass Sie alle Beans in Ihrer Konfigurationsklasse laden
WebsocketSourceConfiguration {
@Bean
ServletWebServerFactory servletWebServerFactory(){
return new TomcatServletWebServerFactory();
}
}
ODER aktivieren Sie auch die AutoConfiguration, um einen Klassenpfad-Scan und eine automatische Konfiguration dieser Beans durchzuführen.
@EnableAutoConfiguration
WebsocketSourceConfiguration
Kann auch in der Klasse Integrationstest durchgeführt werden.
@EnableAutoConfiguration
WebSocketSourceIntegrationTests
Weitere Informationen finden Sie in der Dokumentation zu SpringBootTest Anmerkungen https://docs.spring.io/spring-boot/docs/current/api/ org/springframework/boot/test/context/SpringBootTest.html
das liegt daran, dass spring
die Eigenschaftendatei unter runtime
nicht laden kann. Ich habe spring
Profile verwendet und das Argument (program oder vm) unter runtime( Java -jar application.jar)
, das Hinzufügen des vm-Arguments von profile löste das Problem für mich.
Java -jar -Dspring.profiles.active=dev application.jar
oder mit Programmargument
Java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
in 2.0.5.RELEASE Ich hatte ein ähnliches Problem, als ich folgendes hatte.
package radon;
..
@SpringBootApplication
public class Initializer {
public static void main(String[] args) {
SpringApplication.run(Config.class, args);
}
}
package radon.app.config;
@Configuration
@ComponentScan({ "radon.app" })
public class Config {
..
}
Das Ändern des Initializer-Pakets von radon
in radon.app
hat das Problem behoben.