如何将spring-boot作为客户端应用程序运行?

时间:2016-08-29 11:39:34

标签: java spring-boot entry-point client-applications

我在一个应用程序中有 2个主要入口点

first main 启动服务器,映射控制器并启动一些工作线程。这些工作人员从云队列接收消息。

如果负载增加,我希望能够增加额外的工作来完成我的工作。所以我的应用程序中有一个第二个主入口点,我希望能够在spring-boot(作为客户端应用程序)中启动而不启动默认服务器,以便避免端口冲突(显然会导致失败)。

我如何实现这一目标?

1 个答案:

答案 0 :(得分:15)

使用serverclient个人资料

从命令行启动

要使用具有2个不同配置文件的相同jar和相同入口点,您应该只是在运行时提供Spring配置文件,以便具有不同的应用程序 - $ {profile} .properties已加载(并且可能触发条件Java配置)。

定义2个春季档案(clientserver

  • 每个人都有自己的application-${profile}.properties
  • 客户端的属性将禁用Web容器

拥有一个SpringBootApp和入口点

@SpringBootApplication
public class SpringBootApp {
    public static void main(String[] args) {
        new SpringApplicationBuilder()
            .sources(SpringBootApp.class)
            .run(args);
    }
}

让这个班级成为你的主要班级。

的src /主/资源/的 application-server.properties

spring.application.name=server
server.port=8080

的src /主/资源/的 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个类:

@Configuration
@Profile("client")
public class ClientConfig {
    //...
}

使用serverclient个人资料

从IDE启动

<强>发射器

@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);
    }
}

您可以指定其他配置类(特定于客户端或服务器):

new SpringApplicationBuilder()
    .sources(SpringBootApp.class, ClientSpecificConfiguration.class)
    .profiles("client")
    .web(false)
    .run(args);

的src /主/资源/的 application-server.properties

spring.application.name=server
server.port=8080

的src /主/资源/的 application-client.properties

spring.application.name=client
#server.port= in my example, the client is not a webapp
  

注意,您可能还有2个SpringBootApp(ClientSpringBootApp,   ServerSpringBootApp),每个都有自己的主,它是一个类似的设置   允许您配置不同的AutoConfigurationComponentScan

@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);
    }
}