テストクラス:-
@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****************************************************");
}
}
私は同じ問題を見ました here しかし、何も私を助けませんでした。何が欠けているのか知っていますか?
依存関係階層にコンパイル時の依存関係としてspring-boot-starter-Tomcat
があります。
このメッセージは次のとおりです:ApplicationContextで少なくとも1つのServletWebServerFactory Beanを構成する必要があるため、すでにspring-boot-starter-Tomcat y -ouそのBeanを自動構成するか、手動で実行します。
そのため、テストではapplicationContextをロードする構成クラスは2つのみで、これらは= {WebsocketSourceConfiguration.class、WebSocketSourceIntegrationTests.class}であり、これらのクラスの少なくとも1つに、目的のインスタンスを返す@Beanメソッドが必要です。 ServletWebServerFactory。
*ソリューション*
構成クラス内のすべてのBeanを必ずロードしてください
WebsocketSourceConfiguration {
@Bean
ServletWebServerFactory servletWebServerFactory(){
return new TomcatServletWebServerFactory();
}
}
または、AutoConfigurationがそれらのBeanのクラスパススキャンおよび自動設定を実行できるようにします。
@EnableAutoConfiguration
WebsocketSourceConfiguration
Integration Testクラスでも実行できます。
@EnableAutoConfiguration
WebSocketSourceIntegrationTests
詳細については、SpringBootTest注釈ドキュメントを確認してください https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest .html
in 2.0.5.RELEASE私は以下を持っていたときに同様の問題に直面しました。
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 {
..
}
Initializerのパッケージをradon
からradon.app
に変更すると、問題が修正されました。
これは、spring
がruntime
でプロパティファイルをロードできず、spring
プロファイルを使用しており、runtime( Java -jar application.jar)
で(programまたはvm)引数を提供していなかったためです。 、プロファイルのvm引数を追加すると、問題が解決しました。
Java -jar -Dspring.profiles.active=dev application.jar
またはプログラム引数を使用して
Java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config