Test wiosennego rozruchu nie informuje ServletWebServerApplicationContext o niepowodzeniu uruchomienia z powodu braku ServletWebServerFactory Boba


Klasa testu: -
@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****************************************************");
}}

Widziałem ten sam problem

tutaj
https://coderoad.ru/46463908/
ale nic mi nie pomogło. Czy mogę wiedzieć, czego mi brakuje?
Mam
spring-boot-starter-tomcat
jako zależność czasu kompilacji w hierarchii zależności.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ten post mówi:

Musisz skonfigurować co najmniej 1 komponent bean ServletWebServerFactory w ApplicationContext

więc jeśli masz już spring-boot-starter-tomcat

musisz albo automatycznie skonfigurować ten bean, albo zrobić to ręcznie

.
Tak więc w teście są tylko 2 klasy konfiguracyjne do ładowania applicationContext, to jest = {WebsocketSourceConfiguration.class, WebSocketSourceIntegrationTests.class}, to przynajmniej jedna z tych klas musi mieć metodę @Bean, która zwraca instancję wymaganej ServletWebServerFactory .

* SOLUTION

*
Upewnij się, że załadowałeś wszystkie komponenty do swojej klasy config
WebsocketSourceConfiguration {
@Bean
ServletWebServerFactory servletWebServerFactory(){
return new TomcatServletWebServerFactory();
}
}

LUB umożliwia również automatycznej konfiguracji wykonywanie skanów ścieżek klas i autokonfigurację tych składników.
@EnableAutoConfiguration
WebsocketSourceConfiguration

Można to również zrobić w klasie testu integracji.
@EnableAutoConfiguration
WebSocketSourceIntegrationTests

Więcej informacji można znaleźć w dokumentacji

przez

Adnotacje SpringBootTest

https://docs.spring.io/spring- boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html
https://docs.spring.io/spring- ... .html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

w

2.0.5.RELEASE

rok napotkałem podobny problem, gdy miałem następujące.
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 {
..
}

Zmiana pakietu inicjującego z
radon
na
radon.app
rozwiązała problem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

dzieje się tak, ponieważ
spring
nie może załadować pliku właściwości w
runtime
, użyłem profili
spring
i nie podałem argumentu (programu lub maszyny wirtualnej) w
runtime (java -jar application.jar)
, dodanie argumentu profile vm rozwiązało problem za mnie.
java -jar -Dspring.profiles.active=dev application.jar

lub używając argumentu programu
java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


W przypadku aplikacji internetowych rozszerzenie
* SpringBootServletInitializer *
w klasie głównej.
>
@SpringBootApplication
public class YourAppliationName extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(YourAppliationName.class, args);
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się