【发布时间】:2016-08-14 23:20:33
【问题描述】:
这是我的应用程序类 -
@EnableAutoConfiguration
@SpringBootApplication
@Configuration
public class Application implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(Application.class);
@Autowired
private ITestService3 testService3;
public static void main(String[] args) {
System.exit(SpringApplication.exit(SpringApplication.run(Application.class, args)));
@Override
public void run(String... strings) throws Exception {
testService3.multiThreadTest();
}
}
方法——
public void multiThreadTest() {
ThreadPoolExecutor readExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
List<String> files = listFiles(new File("/Users/admin/filesList"), new ArrayList<>());
for (String file : files) {
readExecutor.execute(new FileParser(file));
}
}
即使在读取所有文件后,应用程序也不会终止 但是当我使用
System.exit(SpringApplication.exit(SpringApplication.run(Application.class, args)));
应用程序终止,所有线程都被杀死。
当我使用 -
SpringApplication.run(Application.class, args).close();
即使应用程序这样说,线程仍继续运行 -
org.springframework.context.annotation.AnnotationConfigApplicationContext@6eda5c9:启动日期 [Mon Aug 15 04:42:02 IST 2016];上下文层次的根 2016-08-15 04:42:05.390 INFO 36600 --- [main] o.s.j.e.a.AnnotationMBeanExporter:在关机时注销 JMX 公开的 bean
然后我必须手动终止应用程序。应用程序以代码 130 退出
有人可以帮助我优雅地关闭应用程序吗?
谢谢
【问题讨论】:
标签: java spring multithreading spring-boot