2개의 포트를 사용하여 스프링 부트를 설정하다
2개의 다른 포트를 사용하여 Spring Boot에서 애플리케이션을 설정하려고 하는데 아직 설정되지 않았습니다.첫 번째 접근은 2개의 컨트롤러에서 이루어졌으며 컨테이너가 있는 2개의 컨트롤러 내에 @Bean을 정의했습니다.setPort(8080);또, 액튜에이터의 의존 관계를 추가해, 관리 포토를 변경했습니다만, 애플리케이션이 실행되지 않습니다."Address in address: bind", 응용 프로그램에 2개의 포트를 설정하려면 어떻게 해야 합니까?한쪽 포트는 admin용이고 다른 한쪽 포트는 my api 컨설트용입니다.
아까도 말씀드렸듯이server.port
그리고.management.port
와 함께management.context-path
임베디드 컨테이너를 다른 포트로 수신하도록 속성을 설정할 수 있습니다(접근하기 위한 관리 관련 속성).Actuator
엔드 포인트)
다른 포트로 수신하려면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
어플.자바
@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에 블로그를 올렸습니다.
스프링부트 2부터EmbeddedServletContainerFactory
otero 솔루션에서 언급된 것은 더 이상 사용할 수 없으므로, 다음 중 하나를 사용해야 합니다.TomcatServletWebServerFactory
또는TomcatReactiveWebServerFactory
당신의 문맥에 따라.
용액은 공장 출하 시 주입 이외에는 동일합니다.
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return tomcat;
}
액추에이터 관리 포트를 변경하려면 속성을 사용할 수 있습니다.
management.port=8081
여기서 전체 속성 목록 보기
업데이트: 이 경우 액추에이터는 Embedded Tomcat(서블릿 컨테이너) 인스턴스를 하나 더 만듭니다.이쪽과 이쪽을 봐 주세요.
단일 프로젝트 내에서 둘 이상의 응용 프로그램을 실행하거나 기본 포트를 변경하려면 다음과 같은 작업을 수행합니다.
@SpringBootApplication
public class NewApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(NewApplication .class);
app.setDefaultProperties(Collections.singletonMap("server.port", "8083"));
app.run(args);
}
}
추가 포트를 1개만 여는 경우 다음 것으로 충분합니다(Kotlin).
@Configuration
class AdditionalEndpointConfig {
@Bean
@ConditionalOnProperty(PORT_PROPERTY)
fun tomcatServletWebServerFactory(@Value("\${$PORT_PROPERTY}") additionalPort: Int) =
TomcatServletWebServerFactory().apply {
addAdditionalTomcatConnectors(
Connector("org.apache.coyote.http11.Http11NioProtocol").apply {
scheme = "http"
port = additionalPort
})
}
companion object {
const val PORT_PROPERTY = "server.additional.port"
}
}
언급URL : https://stackoverflow.com/questions/36357135/configure-spring-boot-with-two-ports
'source' 카테고리의 다른 글
컬을 사용하여 배열이 있는 json 객체를 배치하는 방법 (0) | 2023.03.15 |
---|---|
이력 푸시와 치환의 트레이드오프는 무엇입니까? (0) | 2023.03.15 |
AngularJs $http.post()이 데이터를 전송하지 않음 (0) | 2023.03.15 |
커스텀 투고 타입에 커스텀필드를 추가하는 방법 (0) | 2023.03.15 |
Gutenberg - 1개의 블록 타입에 여러 개의 이너 블록 (0) | 2023.03.15 |