У меня есть метод Java, который выполняется каждую полночь.Метод выполняет резервное копирование данных из одной таблицы1 в другую таблицу2 и очистку таблицы1.Повседневная таблица1 содержит 13214215 строк.
Это мой метод планировщика
@Scheduled(cron = "0 59 23 * * *")
public void doAutoBackupProcess() {
try {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
String url = "http://192.168.31.5:8082/scheduler/attendance/backup/call";
restTemplate.exchange(url, HttpMethod.GET, entity, Object.class);
logger.info("Data Backup success");
} catch (Exception ex) {
Logger.getLogger(SchedulerService.class.getName()).log(Level.SEVERE, null, ex);
}
}
http://192.168.31.5:8082/scheduler/attendance/backup/call содержит метод ниже
@Transactional
public void doStdAttendanceBackup() {
List<StudentAttendanceDetails> sads = studentAttendanceDetailsRepository.findAll();
studentAttendanceDetailsBackUpRepository.save(copyStudentAttendanceDetailsToStdAttendanceDetailsBackUp(sads));
studentAttendanceDetailsRepository.delete(sads);
}
public List<StdAttendanceDetailsBackUp> copyStudentAttendanceDetailsToStdAttendanceDetailsBackUp(List<StudentAttendanceDetails> sads) {
List<StdAttendanceDetailsBackUp> sadbus = sads.stream().map((sad) -> {
StdAttendanceDetailsBackUp sadbu = new StdAttendanceDetailsBackUp();
BeanUtils.copyProperties(sad, sadbu);
return sadbu;
}).collect(Collectors.toList());
return sadbus;
}
Когда выполняется метод Above, тогда я сталкиваюсь с
java.lang.outofmemoryerror gc превышен лимит накладных расходов
и
java.lang.OutOfMemoryError: Пространство кучи Java
Исключение.Я увеличиваю память кучи Java в jvm 2256m, но проблема не решается
Кто-нибудь дает мне лучшее решение?Спасибо