[SPRING] Spring-Boot : tomcat 커넥터를 추가하여 컨트롤러에 바인딩하는 방법
SPRINGSpring-Boot : tomcat 커넥터를 추가하여 컨트롤러에 바인딩하는 방법
Spring-Boot 문서에는 tomcat 용 다중 커넥터를 활성화하는 방법을 설명하는 절이 있습니다 (http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/reference/htmlsingle/#howto- enable-multiple-connectors-in-tomcat).
그러나 단순히 기존 커넥터 (웹 및 관리 커넥터)에 커넥터를 추가하는 방법이 있습니까? 그리고 일부 mvc 컨트롤러에 바인딩 할? 내가 원하는 것은 다른 포트에서 액세스 할 수있는 웹 서비스를 만드는 것입니다.
해결법
-
==============================
1.각 서비스에 대해 자식 응용 프로그램을 사용할 수 있으며 각 자식은 server.port 속성을 설정하여 별도의 포트를 사용하도록 구성됩니다. 격리하려는 모든 구성 요소는 하위 중 하나에 있어야합니다. 공유하려는 구성 요소는 모두 상위 항목에 있어야합니다.
각 서비스에 대해 자식 응용 프로그램을 사용할 수 있으며 각 자식은 server.port 속성을 설정하여 별도의 포트를 사용하도록 구성됩니다. 격리하려는 모든 구성 요소는 하위 중 하나에 있어야합니다. 공유하려는 구성 요소는 모두 상위 항목에 있어야합니다.
다음은이 접근법의 예입니다. 두 개의 하위 응용 프로그램이 있습니다. 하나는 포트 8080에서 청취하고 다른 하나는 포트 8081에서 청취하는 응용 프로그램입니다. 각각은 / 1 및 / 2에 각각 맵핑되는 제어기를 포함합니다.
package com.example; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; public class Application { public static void main(String[] args) { SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(ApplicationConfiguration.class); parentBuilder.child(ServiceOneConfiguration.class) .properties("server.port:8080").run(args); parentBuilder.child(ServiceTwoConfiguration.class) .properties("server.port:8081").run(args); } @Configuration static class ApplicationConfiguration { @Bean public MySharedService sharedService() { return new MySharedService(); } } @Configuration @EnableAutoConfiguration static class ServiceOneConfiguration { @Bean public ControllerOne controller(MySharedService service) { return new ControllerOne(service); } } @Configuration @EnableAutoConfiguration static class ServiceTwoConfiguration { @Bean public ControllerTwo controller(MySharedService service) { return new ControllerTwo(service); } } @RequestMapping("/one") static class ControllerOne { private final MySharedService service; public ControllerOne(MySharedService service) { this.service = service; } @RequestMapping @ResponseBody public String getMessage() { return "ControllerOne says \"" + this.service.getMessage() + "\""; } } @RequestMapping("/two") static class ControllerTwo { private final MySharedService service; public ControllerTwo(MySharedService service) { this.service = service; } @RequestMapping @ResponseBody public String getMessage() { return "ControllerTwo says \"" + this.service.getMessage() + "\""; } } static class MySharedService { public String getMessage() { return "Hello"; } } }
-
==============================
2.server.port, management.port 및 management.context-path 속성 (액추에이터 끝점에 액세스하는 마지막 두 개)은 포함 된 컨테이너가 다른 포트에서 수신 대기하도록 설정할 수 있습니다.
server.port, management.port 및 management.context-path 속성 (액추에이터 끝점에 액세스하는 마지막 두 개)은 포함 된 컨테이너가 다른 포트에서 수신 대기하도록 설정할 수 있습니다.
server.port 및 management.port 이외의 포트에서 수신하는 것이 바람직한 경우
@Configuration public class EmbeddedTomcatConfiguration { @Value("${server.additionalPorts}") private String additionalPorts; @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); Connector[] additionalConnectors = this.additionalConnector(); if (additionalConnectors != null && additionalConnectors.length > 0) { tomcat.addAdditionalTomcatConnectors(additionalConnectors); } return tomcat; } private Connector[] additionalConnector() { if (StringUtils.isBlank(this.additionalPorts)) { return null; } String[] ports = this.additionalPorts.split(","); List<Connector> result = new ArrayList<>(); for (String port : ports) { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(Integer.valueOf(port)); result.add(connector); } return result.toArray(new Connector[] {}); } }
application.yml
server: port: ${appPort:8800} additionalPorts: 8881,8882
Application.java
@SpringBootApplication @ComponentScan(...) @Import(EmbeddedTomcatConfiguration.class) public Application { public static void main(String[] args) { SpringApplication.run(Application .class, args); } }
http://tech.asimio.net/2016/12/15/Configuring-Tomcat-to-Listen-on-Multiple-ports-using-Spring-Boot.html에서 임베디드 Tomcat을 다른 JavaMelody를 독점적으로 새로운 포트를 통해 액세스하도록 구성했습니다.
from https://stackoverflow.com/questions/26111050/spring-boot-how-can-i-add-tomcat-connectors-to-bind-to-controller by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] EntityListeners에 EntityManager를 삽입하는 방법 (0) | 2019.01.31 |
---|---|
[SPRING] JsonDeserializer에서의 Autowiring : SpringBeanAutowiringSupport 대 HandlerInstantiator (0) | 2019.01.31 |
[SPRING] Hibernate JPA를 사용한 작업 단위 처리 문제 (0) | 2019.01.31 |
[SPRING] 스프링 부트를 사용하는 동안 스프링 배치 범위 문제 (0) | 2019.01.31 |
[SPRING] 런타임시 스프링 <task : scheduled> 객체는 어떻게 표현됩니까? (0) | 2019.01.31 |