728x90
💻 SchedulerConfig.class
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
// [Configuration 어노테이션 : 자바 클래스 파일을 설정 파일로 사용]
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
// [스레드 풀을 사용해서 모든 예약된 스케줄 작업이 실행되도록 설정]
// [스프링에서는 스케줄링 작업은 한개의 스레드 풀에서 실행되기때문에 >> 다중 동시 실행을 위해서 스레드 풀 설정 실시]
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
threadPoolTaskScheduler.setThreadNamePrefix("scheduled-task-pool-");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
System.out.println("\n");
System.out.println("=======================================");
System.out.println("current thread : " + Thread.currentThread().getName());
System.out.println("=======================================");
System.out.println("\n");
}
}
💻 SchedulerService.class
import com.example.intermediate.repository.CommentRepository;
import com.example.intermediate.repository.PostRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Slf4j //로그
@RequiredArgsConstructor // final 멤버 변수를 자동으로 생성
@Component // 스프링이 필요 시 자동으로 생성하는 클래스 목록에 추가
public class SchedulerService {
private final PostRepository postRepository;
private final CommentRepository commentRepository;
// 현재날짜 및 시간
public String getNowDateTime24() {
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy.MM.dd kk:mm:ss E요일");
String str = dayTime.format(new Date(time));
return str;
}
// 초, 분, 시, 일, 월, 주 순서
@Scheduled(cron = "0 00 01 * * *")
public void selectPost() {
System.out.println("[JopTime] : " + getNowDateTime24());
System.out.println("게시글 조회");
List<Post> postList = postRepository.findAll();
for (Post post : postList) {
if(commentRepository.findAllByPost(post).isEmpty()) {
log.info("게시물 < " + post.getTitle() + " > 이 삭제되었습니다.");
postRepository.deleteById(post.getId());
}
}
}
}
💻 main.calss
@EnableScheduling // 스프링 부트에서 스케줄러가 작동
@EnableJpaAuditing
@SpringBootApplication
public class IntermediateApplication {
public static void main(String[] args) {
SpringApplication.run(IntermediateApplication.class, args);
}
}
728x90
'🛠 BackEnd > Spring' 카테고리의 다른 글
[ Spring ] Spring Batch 이해와 도메인 용어 (1) | 2022.12.03 |
---|---|
[ Spring ] Table 'batch.batch_job_instance' doesn't exist / 에러 해결방법 (SpringBoot 2.5 이상) (0) | 2022.11.30 |
[ Spring ] - Spring Security 인증 절차 인터페이스 UserDetails, UserDetailsService (0) | 2022.10.09 |
[ Spring ] Controller, Service Repository 코드 분리 (2/2) (1) | 2022.10.08 |
[ Spring ] Controller, Service Repository 코드 분리 (1/2) (1) | 2022.10.08 |
댓글