※ 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에서 타임리프 이미지 동적 리소스 사용하기 (0) | 2023.10.11 |
Spring Boot + WebSocket + UDP 데이터 통신 (0) | 2023.07.18 |
Spring Boot + build.gradle + WebSocket 연동 (0) | 2023.07.17 |