在Spring Boot文档中,有一节描述了如何为tomcat启用多个连接器(http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/reference/htmlsingle/#howto-在tomcat中启用多个连接器)。
但是有没有一种方法可以简单地将连接器添加到现有的连接器(web和管理连接器)?并将它们绑定到一些mvc控制器?我想做的是创建一些可以在不同端口上访问的web服务。
server.port
,management.port
和management.context-path
属性(访问Actuator
endpoint的最后两个)可以设置为使嵌入式容器监听在不同的港口。
在这种情况下,最好在服务器以外的端口上侦听。端口
和管理。端口
:
@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[] {});
}
}
应用yml
server:
port: ${appPort:8800}
additionalPorts: 8881,8882
应用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
配置为通过新端口以独占方式访问它。
您可以为每个服务使用一个子应用程序,每个子应用程序通过设置其server.port
属性来配置为使用单独的端口。您想要隔离的任何组件都应该放在其中一个子组件中。您想要共享的任何组件都应该放在父级中。
下面是这种方法的一个例子。有两个子应用程序,一个在端口8080上侦听,另一个在端口8081上侦听。每个包含一个控制器,分别映射到/one
和/two
。
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";
}
}
}
问题内容: 我刚开始使用angularJS,并努力为我要做的事情找出合适的架构。我只有一个页面应用程序,但 URL始终应该保持不变 ;我不希望用户能够导航到根以外的任何路由。在我的应用中,有一个主要的div需要承载不同的视图。访问新视图时,我希望它接管主div中的显示。以这种方式加载的视图可以被丢弃或停留在DOM中,就像隐藏在DOM中一样- 我很想知道每个视图如何工作。 我提出了一个我想做的粗略的
我需要让我的Spring Boot应用程序在新端口上动态启动/停止侦听。我知道为此需要在Spring环境中注入一个新的tomcat连接器。 我能够使用ServletWebServerFactory和tomcatConnectorCustomizer添加连接器。但是这个bean只在Spring启动时加载。 有没有办法在运行时添加tomcat连接器?比如说方法调用? 我设法在运行时添加了一个Tomca
向Postgres连接器中添加新表的步骤应该是什么?我的连接器正在跟踪两个表(表1和表2),我想添加另一个表(表3),它已经存在,并且在我的数据库中有数据。 这是我当前的配置: } 我试图修改连接器“table.include.list”并将“public.table3”添加到列表中,但它似乎没有触发此表的快照过程。 有什么想法吗?
我有一个Debezium连接器,连接到SQL服务器,其中一个表在配置参数中。我想添加另一个表,我已经添加到参数中,尽管我的连接器没有接收到它。 我以前的看起来像这样: 我当前的如下所示: 我重启了Kafka,重启了Debezium中的连接器,但是当我查看bash中的连接器状态时,我仍然看到旧的值。是否需要做其他事情来让连接器刷新配置文件中的内容? Debezium版本:1.2.5。Kafka最终版
大家下午好。我通常会自己发现并修正错误,但这次我真的卡住了。我的作业是写一个贷款计算器。所有代码都正常工作,编译也很好,直到我需要创建一个线图/图形,它弹出在一个新窗口中。 问题出在加载FXML文件或将其他控制器连接到主控制器的某个地方。 我尝试了不同的方法,并在不同的论坛上查看了解决方案,但无法在代码中实现。有人能给我提个解决办法吗? 提前感谢你的帮助。 P.S.这些是我试图寻找解决方案的链接,
我需要在主控制器中绑定来自不同fxml的控件。我有3个fxml文件,分别名为MainView.fxml、ChildView1.fxml和ChildView2.fxml。 mainview.fxml ChildView1.fxml 默认情况下,从ChildView1Controller禁用button1。 我希望在我的另一个视图(ChildView2.fxml)中的表行被选中时启用它。同样,在取消选