SpringBootでWebアプリを作成する際には、組み込みTomcatを利用したJarファイルの成果物を実行することで起動することが可能です。
java -jar xxx.jar
ただ、従来のWarファイルでのデプロイとは違うので組み込みTomcat+Apache+WebSocketとの連携設定で一癖ありハマりました。
Ajpの設定
組み込みtomcat用のJavaConfigの追加
以下のJavaConfigが従来の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;
dependencies {
compile "org.springframework.boot:spring-boot-starter-websocket:1.3.3.RELEASE"
@SpringBootApplication
@EnableWebSocketMessageBroker//追加
public class Application extends SpringBootServletInitializer
public static void main( String... args )
SpringApplication.run( Application.class, args );
WebSocketConfiguration.java
@Configuration
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { // AbstractWebSocketMessageBrokerConfigurerを継承しWebSocket関連のBean定義をカスタマイズする
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();//フロントが購読するエンドポイント
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/sock");
registry.enableSimpleBroker("/topic", "/queue");
@MessageMapping( "/chat/{accountId}" )
@SendTo( "/topic/chat/all" )
public ChatList all( @DestinationVariable Integer accountId, ChatMessage message ) throws InterruptedException
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) => {//WebSocketのコネクション確立
stompClient.subscribe('/topic/chat/all', ( chatList ) => {
var send = () => {
stompClient.send(`/sock/chat/${ChatStore.accountId}`, {},JSON.stringify({
'value': ChatStore.message
return {
connect,
httpd.conf
ProxyPass /chat/info ajp://localhost:8009/chat/info #SpringWebSocketが自動生成したSockJSとWebSocketを接続してくれるURL
ProxyPass /chat ws://localhost:8080/chat #wsのプロキシ設定
ProxyPass / ajp://localhost:8009/ #ajpのプロキシ設定
じゃあの。