[JAVA] In die Spring Boot-Anwendung integrierte Integration von Tomcat, Apache und WebSocket

Informationen zur Spring Boot-Anwendung

Wenn Sie eine Webanwendung mit SpringBoot erstellen, können Sie sie starten, indem Sie das Artefakt der Jar-Datei mit dem integrierten Tomcat ausführen.

java -jar xxx.jar

Da es sich jedoch von der herkömmlichen Bereitstellung mit War-Datei unterscheidet, war ich süchtig nach der Einstellung der Zusammenarbeit mit dem integrierten Tomcat + Apache + WebSocket.

Ajp-Einstellungen

Fügen Sie JavaConfig für den integrierten Tomcat hinzu

Die folgende JavaConfig entspricht den herkömmlichen Einstellungen für server.xml.

TomcatConfiguration.java


@Configuration
public class TomcatConfiguration 
{

 
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
                TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.addAdditionalTomcatConnectors(ajpConnector());
        return tomcat;
    }

    private Connector ajpConnector() {
        Connector connector = new Connector("org.apache.coyote.ajp.AjpNioProtocol");
        connector.setAttribute("maxThreads", 100);
        connector.setProtocol("AJP/1.3");
        connector.setPort(8009);
        connector.setRedirectPort(8043);
        connector.setURIEncoding("UTF-8");
        return connector;
    }

}

server.xml


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Aktivieren Sie WebSocket

1. Abhängigkeit hinzufügen

Zu Gradle-Abhängigkeiten hinzugefügt

build.gradle


dependencies {
...
    compile "org.springframework.boot:spring-boot-starter-websocket:1.3.3.RELEASE"
...
}

2. Aktivieren Sie Websocket

Fügen Sie die Annotation @ EnableWebSocketMessageBroker hinzu und aktivieren Sie sie

Application.java


@SpringBootApplication
@EnableWebSocketMessageBroker//hinzufügen
public class Application extends SpringBootServletInitializer
{
    public static void main( String... args )
    {
         SpringApplication.run( Application.class, args );
    }
}

3. JavaConfig für WebSocket hinzugefügt

WebSocketConfiguration.java


@Configuration
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { //Erben Sie AbstractWebSocketMessageBrokerConfigurer, um WebSocket-bezogene Bean-Definitionen anzupassen

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();//Von der Rezeption abonnierte Endpunkte
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/sock");
        registry.enableSimpleBroker("/topic", "/queue");
    }
}

4. Controller-Einstellungen

ChatController.java


@RestController
@RequestMapping("/chat/")
public class ChatController
{    
    @MessageMapping( "/chat/{accountId}" )
    @SendTo( "/topic/chat/all" )
    public ChatList all( @DestinationVariable Integer accountId, ChatMessage message ) throws InterruptedException
    {
    ...
    }

}

5. SockJS-Einstellungen auf der Vorderseite

Dieses Mal verwenden wir das Angular Js1-System

ChatService.js


import SockJS from "sockjs-client";

export function ChatService($http, ChatStore) {
  let stompClient = {};
  var connect = ( $scope ) => {
    let socket = new SockJS( '/chat');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, (frame) => {//Aufbau einer WebSocket-Verbindung
      stompClient.subscribe('/topic/chat/all', ( chatList ) => {
      ...
      });
    });
  }
  var send = () => {
    stompClient.send(`/sock/chat/${ChatStore.accountId}`, {},JSON.stringify({
      'value': ChatStore.message
    }));
  }
  return {
    connect,
    send
 };
}

Apache-Einstellungen

httpd.conf


ProxyPass /chat/info ajp://localhost:8009/chat/info #URL, die SockJS und WebSocket verbindet und automatisch von SpringWebSocket generiert wird
ProxyPass /chat ws://localhost:8080/chat #ws Proxy-Einstellungen
ProxyPass / ajp://localhost:8009/ #Ajp-Proxy-Einstellungen

Funktionsprüfung

Mit den oben genannten Einstellungen funktioniert (sollte) das integrierte Tomcat + Apache + WebSocket! !!

Am Ende

Ich habe alles außer den Hauptpunkten gefaltet, aber bitte verzeihen Sie mir, da ich den Artikel jedes Mal überarbeiten werde, wenn ein Fehler auftritt. .. .. orz

Na dann.

Recommended Posts

In die Spring Boot-Anwendung integrierte Integration von Tomcat, Apache und WebSocket
Spring Boot 2.0.0 startet den integrierten Tomcat nicht
Apache und Tomcat
Spring Boot 2.3 Verfügbarkeit von Anwendungen
[Spring Boot] Erstellung von Webanwendungen
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Spring Boot-Anwendungsentwicklung in Eclipse
Überprüfungspunkte für den Spring Boot-Anwendungscode
Erstellen Sie eine Anfrage-App mit Spring Boot
Spring-Profilfunktion und Spring Boot application.properties
Implementieren Sie die Spring Boot-Anwendung in Gradle
[Java] LINE-Integration mit Spring Boot
[Spring Boot] Vorsichtsmaßnahmen beim Entwickeln einer Webanwendung mit Spring Boot und beim Ausführen eines Krieges auf einem unabhängigen Tomcat-Server
WAR die WEB-Anwendung per Spring Boot und stellen Sie sie auf dem Tomcat-Server bereit
Verarbeitung beim Starten einer Anwendung mit Spring Boot
HTTPS mit Spring Boot und Let's Encrypt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Versuchen Sie Spring Boot 1 (Umgebungskonstruktion ~ Tomcat-Start)
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Spring Boot Whitelabel-Fehlerseite und JSON-Antwort
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Verwendung des eingebauten h2db mit Federstiefel
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit
CSRF-Gegenmaßnahmenrichtlinie und Implementierungsbeispiel in einer REST-Anwendung unter Verwendung von "Spring Boot" + "EXT JS"