Avatar
0
a83raljj7lgom9gm Beginner
Tối ưu xử lý khi data nhiều
Em có 1 service api dùng spring boot gọi xuống DB để lấy data lên, data này có cỡ 1 triệu record. Web dùng spring boot MVC gọi api qua service đó để lấy data và down xuống file txt theo từng dòng và nén nó thành file zip. Service đó xử lý lâu dẫn tới timeout, có cách nào để tối ưu ở service và web của em không ạ.
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Em phải tách ra 1 thread riêng chứ đừng dùng ngay cái thread của controller nhé. Em có thể code kiểu này:
@Service
public class EmailService {

    private final DataRepository dataRepository;

    public void drainDataToFile() {
        Thread newThread = new Thread(() -> {
           long lastId = 0;
           while (true) {
               try {
                   List<Record> records = dataRepository.findByIdGt(lastId, limit);
                   txtFile.save(records);
                   if (records.size() < limit) {
                     break;
                   }
                   lastId = records.last().getId();
               } catch (InterruptedException e) {
                   break;
               } catch (Throwable e) {
                   System.out.println("error: " + e);
               }
           }
        });
        newThread.setName("mail-sender");
        newThread.start();
    }
}

Anh viết demo vậy, em có thể cài đặt chi tiết hơn nhé.

  • 0
  • Reply