Tôi đang xây dựng một ứng dụng java Dòng lệnh bằng cách sử dụng Spring Boot để làm cho nó hoạt động nhanh chóng.Cách tắt ứng dụng dòng lệnh Khởi động Spring
Ứng dụng tải các loại tệp khác nhau (ví dụ CSV) và tải chúng vào Cơ sở dữ liệu Cassandra. Nó KHÔNG sử dụng bất kỳ thành phần web nào, nó không phải là một ứng dụng web.
Sự cố tôi đang gặp phải là dừng ứng dụng khi hoàn thành công việc. Tôi đang sử dụng giao diện Spring CommandLineRunner với một @Component
để chạy các tác vụ, như được hiển thị bên dưới, nhưng khi công việc được hoàn thành, ứng dụng không dừng lại, nó vẫn tiếp tục chạy vì một lý do nào đó và tôi không thể tìm cách ngăn chặn nó.
@Component
public class OneTimeRunner implements CommandLineRunner {
@Autowired
private CassandraOperations cassandra;
@Autowired
private ConfigurableApplicationContext context;
@Override
public void run(String... args) throws Exception {
// do some work here and then quit
context.close();
}
}
CẬP NHẬT: vấn đề có vẻ là spring-cassandra
, vì không có gì khác trong dự án là. Có ai biết tại sao nó giữ các chủ đề chạy trong nền mà ngăn chặn các ứng dụng từ dừng lại?
CẬP NHẬT: sự cố đã biến mất bằng cách cập nhật lên phiên bản khởi động mùa xuân mới nhất.
Bất kỳ giải pháp nào cho điều này? Nó xảy ra với khởi động bình thường mùa xuân (không có cassandra) – ACV
@ACV không, tôi chỉ sống với nó. Tôi đã học được rằng một số mô-đun mùa xuân sinh ra các chủ đề của riêng chúng, ví dụ: Cassandra có một hồ bơi thread cho các kết nối, hoặc RabbitMQ khi bạn sử dụng các container listener. Chúng mất một thời gian để tắt sau khi bạn gọi 'context.close()' để dừng ứng dụng. – ESala
Xem câu trả lời của tôi bên dưới – ACV