如何将spring-boot作为客户端应用程序运行? [英] How to run spring-boot as a client application?
问题描述
我在一个应用程序中有 2个主要入口点。
I have 2 Main entry points in a single application.
第一个主要启动服务器,映射控制器并启动一些工作线程。这些工作人员从云队列接收消息。
The first main starts the server, maps the controllers and starts some worker threads. These workers receive messages from cloud queues.
如果负载增加,我希望能够增加额外的工作来完成我的工作。所以我的应用程序中有一个第二个主入口点,我希望能够在spring-boot(作为客户端应用程序)中启动而不启动默认服务器,以便避免端口冲突(显然会导致失败)。
In case of increased load, I want to be able to add additional workers to do my job. So I have a second Main entry point in my application which I want to be able to start without starting the default server in spring-boot (as a client application) so as to avoid port conflict (and obviously which will lead to failure).
我如何实现这一目标?
How do I achieve this?
推荐答案
使用 server
和<$ c $从命令行启动c>客户端配置文件
要使用相同的jar和相同的入口点以及2个不同的配置文件,您应该只是在运行时提供Spring配置文件,具有不同的应用程序 - 加载$ {profile} .properties(并且可能触发条件Java配置)。
Launching from the command line with server
and client
profiles
To use the same jar and same entry point with 2 different profiles, you should simply provide the Spring profile at runtime, to have distinct application-${profile}.properties loaded (and potentially Conditional Java config triggered).
定义2个弹簧配置文件(客户
和服务器
):
Define 2 spring profiles (client
and server
):
- 每个都有自己的
应用程序 - $ {profile} .properties
- 客户端的属性将禁用Web容器
拥有一个SpringBootApp和入口点:
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.run(args);
}
}
将此课程作为主要班级。
Make this class your main-class.
src / main / resources / application-server.properties :
src/main/resources/application-server.properties:
spring.application.name=server
server.port=8080
src / main / resources / application-client.properties :
src/main/resources/application-client.properties:
spring.application.name=client
spring.main.web-environment=false
启动两个配置文件命令行:
$ java -jar -Dspring.profiles.active=server YourApp.jar
$ java -jar -Dspring.profiles.active=client YourApp.jar
您可能 @Configuration
根据活动配置文件有条件触发的类:
You may have @Configuration
classes triggered conditionally based on the active profile too:
@Configuration
@Profile("client")
public class ClientConfig {
//...
}
L.使用服务器
和客户端
配置文件从IDE启动
启动器:
Launching from the IDE with server
and client
profiles
Launchers:
@SpringBootApplication
public class SpringBootApp {
}
public class LauncherServer {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.profiles("server")
.run(args);
}
}
public class ClientLauncher {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(SpringBootApp.class)
.profiles("client")
.web(false)
.run(args);
}
}
您可以指定其他配置类(特定于客户端或服务器):
You may specify additional configuration classes (specific to client or server):
new SpringApplicationBuilder()
.sources(SpringBootApp.class, ClientSpecificConfiguration.class)
.profiles("client")
.web(false)
.run(args);
src / main / resources / application-server.properties :
src/main/resources/application-server.properties:
spring.application.name=server
server.port=8080
src / main / resources / application-client.properties :
src/main/resources/application-client.properties:
spring.application.name=client
#server.port= in my example, the client is not a webapp
注意,您可能还有2个SpringBootApp(
ClientSpringBootApp
,
ServerSpringBootApp
),每个都有自己的main,它是一个类似的设置
,允许你配置不同的AutoConfiguration
或ComponentScan
:
Note, you may also have 2 SpringBootApp (
ClientSpringBootApp
,ServerSpringBootApp
), each with its own main, it's a similar setup which allow you to configure differentAutoConfiguration
orComponentScan
:
@SpringBootApplication
@ComponentScan("...")
public class ServerSpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ServerSpringBootApp.class)
.profiles("server")
.run(args);
}
}
//Example of a difference between client and server
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@ComponentScan("...")
public class ClientSpringBootApp {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ClientSpringBootApp.class)
.profiles("client")
.web(false)
.run(args);
}
}
这篇关于如何将spring-boot作为客户端应用程序运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!