我有一个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应用程序一样实例化?
答案 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扫描必要的软件包,然后在您的应用程序中自动装配。