복붙노트

[SPRING] Wildfly의 스프링 부트 웹 소켓

SPRING

Wildfly의 스프링 부트 웹 소켓

안녕 Wildfly 8.1에 Spring Boot App을 배포해야하는데 다음과 같은 예외가 발생합니다.

웹 소켓 및 메시징에 대한 내 설정이 그 원인 일 수 있습니까? 나는이 https://github.com/joshlong/boot-examples/issues/2를보고 있었다. 그리고 제시된 해결책들 중 어느 것도 나에게 효과가없는 것 같다. 다음은 내 친구의 의존성입니다.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.6.RELEASE</version>
</parent>

<dependencies>

    <!--Testing-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${apache.httpcomponents.version}</version>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-messaging</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>

    <!--Database-->
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901.jdbc4</version>
    </dependency>
</dependencies>

나는 직접 spring-boot-starter-websocket을 사용해 보았지만 똑같은 것을 얻는다. 여기에 내 websocket 설정도 있습니다 :

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    super.configureMessageBroker(registry);
    registry.enableSimpleBroker("/ssp");
    registry.setApplicationDestinationPrefixes("/inc");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/update/applications");
}
}

이것을 읽어 주셔서 감사합니다. 어떤 도움이라 더 많이 감사 할 것입니다. 또한, 이것은 나의 첫 번째 부팅 응용 프로그램입니다. : /

해결법

  1. ==============================

    1.tomcat-embed-websocket을 제외해야합니다.

    tomcat-embed-websocket을 제외해야합니다.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-websocket</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  2. ==============================

    2.spring-boot-starter-web과 spring-boot-starter-websocket은 기본적으로 spring-boot-starter-tomcat을 포함하고 있으므로 아래와 같이 바람둥이를 제외하십시오

    spring-boot-starter-web과 spring-boot-starter-websocket은 기본적으로 spring-boot-starter-tomcat을 포함하고 있으므로 아래와 같이 바람둥이를 제외하십시오

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    undertow를 포함 시키면, 클래스 패스에 어디에서도 바람둥이가 존재하지 않는지 확인하십시오.

  3. ==============================

    3.확실하지는 않지만 웹 소켓 주변의 POM은 다음과 같아야합니다.

    확실하지는 않지만 웹 소켓 주변의 POM은 다음과 같아야합니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-websocket</artifactId>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

    스프링 메시징, spring-websocket, jackson-databind, spring-boot-starter-web은 중복 적입니다.

    스프링 부트 시동기 (spring-boot-starter-thymeleaf)도 있습니다.

    그러나 나는 당신의 원인의 뿌리가 바람둥이 embed-websocket라고 생각합니다.

  4. ==============================

    4.spring-boot-starter-tomcat이 포함 된 모든 종속성을 찾으려면 다음 명령을 사용하십시오.

    spring-boot-starter-tomcat이 포함 된 모든 종속성을 찾으려면 다음 명령을 사용하십시오.

    mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot-starter-tomcat
    

    이 명령으로 나열된 모든 종속성에서 Tomcat 시작 프로그램을 제외하십시오.

    그런 다음 javax.servlet-api를 제공된 종속성으로 추가해야 할 수도 있습니다.

    <dependency>
        <artifactId>javax.servlet</artifactId>
        <groupId>javax.servlet-api</groupId>
        <scope>provided</scope>
    </dependency>
    

    이 문제를 가진 사용자를 포기하십시오 :이 티켓에 대한 의견을 확인하십시오 : https://github.com/spring-projects/spring-boot/issues/6166

  5. from https://stackoverflow.com/questions/25792121/spring-boot-websockets-in-wildfly by cc-by-sa and MIT license