[JAVA] Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot

À propos de l'application Spring Boot

Lors de la création d'une application Web avec SpringBoot, il est possible de la démarrer en exécutant l'artefact du fichier Jar à l'aide du Tomcat intégré.

java -jar xxx.jar

Cependant, comme il est différent du déploiement conventionnel avec War file, j'étais accro au réglage de la coopération avec le Tomcat + Apache + WebSocket intégré.

Paramètres Ajp

Ajouter JavaConfig pour tomcat intégré

Le JavaConfig suivant sera le même que les paramètres traditionnels de 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" />

Activer WebSocket

1. Ajouter une dépendance

Ajouté aux dépendances de gradle

build.gradle


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

2. Activez Websocket

Ajoutez et activez l'annotation @ EnableWebSocketMessageBroker

Application.java


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

3. Ajout de JavaConfig pour WebSocket

WebSocketConfiguration.java


@Configuration
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { //Hériter de AbstractWebSocketMessageBrokerConfigurer pour personnaliser les définitions de bean associées à WebSocket

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();//Endpoints souscrits par la réception
    }

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

4. Paramètres du contrôleur

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. Paramètres SockJS avant

Cette fois, nous utilisons le système Angular Js1

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) => {//Établissement de la connexion WebSocket
      stompClient.subscribe('/topic/chat/all', ( chatList ) => {
      ...
      });
    });
  }
  var send = () => {
    stompClient.send(`/sock/chat/${ChatStore.accountId}`, {},JSON.stringify({
      'value': ChatStore.message
    }));
  }
  return {
    connect,
    send
 };
}

Paramètres Apache

httpd.conf


ProxyPass /chat/info ajp://localhost:8009/chat/info #URL qui connecte SockJS et WebSocket générée automatiquement par SpringWebSocket
ProxyPass /chat ws://localhost:8080/chat #paramètres de proxy ws
ProxyPass / ajp://localhost:8009/ #paramètres proxy ajp

Contrôle de fonctionnement

Avec les paramètres ci-dessus, le Tomcat + Apache + WebSocket intégré fonctionnera (devrait) fonctionner! !!

À la fin

J'ai tout plié sauf les points principaux, mais pardonnez-moi car je réviserai l'article chaque fois qu'il y aura une erreur. .. .. orz

Eh bien.

Recommended Posts

Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot
Spring Boot 2.0.0 ne démarre pas le Tomcat intégré
Apache et Tomcat
Disponibilité de l'application Spring Boot 2.3
[Spring Boot] Création d'applications Web
Application Java CICS-Run - (4) Application Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Développement d'applications Spring Boot dans Eclipse
Points de révision du code de l'application Spring Boot
Créer une application d'enquête avec Spring Boot
Fonction de profil Spring et application Spring Boot.
Implémenter l'application Spring Boot dans Gradle
[Java] Intégration LINE avec Spring Boot
[Spring Boot] Précautions lors du développement d'une application Web avec Spring Boot et du placement d'une guerre sur un serveur Tomcat indépendant
WAR l'application WEB par Spring Boot et la déployer sur le serveur Tomcat
Traitement lors du démarrage d'une application avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
Ajoutez une botte de printemps et un dégradé à éclipse
Exécutez l'application WEB avec Spring Boot + Thymeleaf
À propos de la conception de Spring Boot et de l'environnement de test unitaire
Page d'erreur Spring Boot Whitelabel et réponse JSON
Configurer l'application Spring Boot avec le module multiple maven
Comment utiliser h2db intégré avec Spring Boot
Sortie des journaux de demande et de réponse avec Spring Boot
Créez une application Spring Boot à l'aide d'IntelliJ IDEA
Divers tableau de correspondance de Spring Framework et Spring Boot
Déployer l'application Spring Boot sur Elastic Beanstalk
Politique de contre-mesure CSRF et exemple de mise en œuvre dans une application REST utilisant "Spring Boot" + "EXT JS"