※ 1분마다 실행하여 특정폴더의 1분전 화일 삭제하기
@SpringBootApplication에 @EnableScheduling 선언
@EnableScheduling @SpringBootApplication public class DevApplication { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); objectMapper.registerModule(module); return objectMapper; } public static void main(String[] args) { SpringApplication.run(DevApplication.class, args); } }
@Scheduled > fixedDelay 사용
package com.coforward.dev.service; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.io.File; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @Service public class SchedulerService { @Value("${file.data}") private String dataFolder; // 1분전 화일 삭제 @Scheduled(fixedDelay = 100000) // 1분마다 실행 public void run() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for(int i=1; i<=3; i++) { String path = dataFolder.replace("file:///", "") + "channel"+i; File folder = new File(path); try { File[] folder_list = folder.listFiles(); //파일리스트 얻어오기 System.out.println("folder_list.length >>>>>>>" + folder_list.length); for (int j = 0; j < folder_list.length; j++) { File files = new File(String.valueOf(folder_list[j])); String date = String.valueOf(sdf.format(files.lastModified())).replaceAll("[^0-9]", ""); int reg_year = Integer.parseInt(date.substring(0, 4)); int reg_month = Integer.parseInt(date.substring(4, 6)); int reg_day = Integer.parseInt(date.substring(6, 8)); int reg_hour = Integer.parseInt(date.substring(8, 10)); int reg_min = Integer.parseInt(date.substring(10, 12)); int reg_sec = Integer.parseInt(date.substring(12, 14)); // 현재 날짜 LocalDate now = LocalDate.now(); // 현재 시간 LocalTime time = LocalTime.now(); LocalDateTime startDateTime = LocalDateTime.of(reg_year, reg_month, reg_day, reg_hour, reg_min, reg_sec); LocalDateTime endDateTime = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), time.getHour(), time.getMinute(), time.getSecond()); Duration duration = Duration.between(startDateTime, endDateTime); // .ts 확장자를 duration.getSeconds() 60초 이상 화일들 삭제 if (String.valueOf(folder_list[j]).contains(".ts") == true && duration.getSeconds() > 60) { System.out.println("60초 이후 화일 삭제 ==>> " + folder_list[j] + " -- " + sdf.format(files.lastModified()) + " -- " + duration.getSeconds()); folder_list[j].delete(); //파일 삭제 } } } catch (Exception e) { e.getStackTrace(); } } } }
'Spring boot' 카테고리의 다른 글
Spring Boot - localhost에 도메인(hosts) 연결하여 SSL 적용 (0) | 2024.12.27 |
---|---|
gradlew bootRun Profile 옵션 추가 (1) | 2024.12.27 |
Spring Boot에서 타임리프 이미지 동적 리소스 사용하기 (1) | 2023.10.11 |
Spring Boot + WebSocket + UDP 데이터 통신 (0) | 2023.07.18 |
Spring Boot + build.gradle + WebSocket 연동 (0) | 2023.07.17 |