我想运行一个Spring Boot应用程序,但让它在多个端口上侦听。
目的是让Apache在不同端口上将多个(子)域转发到Spring Boot应用程序(Tomcat)。例:
example.com/** -> PORT 8080 client.example.com/** -> PORT 8090 employee.example.com/** -> PORT 8100
据我从SO上的多个线程了解到,最好@SpringBootApplication从一个主类启动多个Annotated类,对吗?(https://stackoverflow.com/a/25870132/1510659)
@SpringBootApplication
我还不了解的是如何分别配置每个应用程序。
假设我已经启动了这三个应用程序,如上面的链接文章所示:
MainExampleApplication ClientExampleApplication EmployeeExampleApplication
现在,例如,我想为@Configuration这些应用程序中的每一个提供单独的Spring Security 类,以及@RequestMappings它们可能具有相同的值(例如“ /”)。
@Configuration
@RequestMappings
如何告诉@Configuration或@Controller类将它们分配给哪个应用程序?
@Controller
还是有一些属性可以在启动时传递给应用程序,以指定哪些资源负责上下文?
我希望我不会在这个方向上完全错误。我确实具有Spring MVC的经验,并且已经配置了一些相当简单的Spring应用程序- 但是没有多个上下文。如果有人可以带领我朝正确的方向前进,我将感到非常高兴。先感谢您。
更新
如iamiddy的回答和xeon的评论中所述,我为此使用了Spring Profiles。我在启动时为SpringApplicationBuilder提供了每个应用程序上下文的配置文件,并在@Profile("some_profile")上使用了@Components仅对某些上下文可用的。
@Profile("some_profile")
@Components
使用Profiles它是一个很棒的spring功能,仅加载与配置文件关联的bean。完成此操作后,请使用different 和arguments 启动 N 次应用程序port``profile
Profiles
port``profile
例:这是您开始第一个的方式,其余的则做到您的 N
java -jar -Dspring.profiles.active=production1 -Dserver.port=9000 app.jar