如何在一个代码库中拥有2个或更多弹簧应用程序?

时间:2018-01-03 18:36:34

标签: java spring spring-mvc

我有一个springboot Web应用程序,我想构建一个弹簧控制台应用程序用于实用程序,所以我有两个主要的静态方法启动,命令行应用程序是这样的:

@SpringBootApplication
public class Maintf implements CommandLineRunner {

    private final AService aserviceInstance;

    @Autowired
    public Maintf(AService service) {
        this.aserviceInstance = service;
    }

    public static void main(String[] args) throws Exception {
        SpringApplication m = (new SpringApplicationBuilder(Maintf.class)).web(false).build();
        m.run();
    }

    @Override
    public void run(String... strings) throws Exception {
        for (Account a : aserviceInstance.getAccounts() ) {
            System.out.println(a.getId());
        }
    }

}

但是当我运行它时,尝试实例化我不使用的所有内容(控制器,配置和其他服务)甚至Web应用程序容器(tomcat)并且失败,我只想在同一代码库中执行某些服务。我尝试注入的服务与其他组件没有任何依赖关系。 如何防止spring像Web应用程序一样实例化?

1 个答案:

答案 0 :(得分:0)

由于您不希望整个Application启动,您可以让当前的SpringBootApplication扫描必要的包(在此必需的服务包中)

Forexample:

<强>应用1

com.app.app1

com.app.app1.services

- &GT;服务1

- &GT;服务2

SpringBootApplication1

<强>应用2

com.app.app2

com.app.app2.services

- &GT;服务1

- &GT;服务2

SpringBootApplication2

<强> currentApplication

com.app.currentApp

com.app.currentApp.services

- &GT;服务1

- &GT;服务2

@SpringBootApplication(scanBasePackages = {&#34; com.app.app1.services&#34;,&#34; com.app.app2.services&#34;}) CurrentSpringBootApplication

通过这种方式,您可以让Springboot扫描必要的软件包,然后在您的应用程序中自动装配。