spring-boot 다 중 스 레 드 병행 정시 작업 솔 루 션
캐 시 주석 열기
@SpringBootApplication
@EnableScheduling //
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
정시 작업 작성
@Component
public class ScheduledTasks {
private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
// cron cron , cron
@Scheduled(cron="0/5 * * * * ? ") // 5
public void testCron() {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info(sdf.format(new Date())+"********* 5 ");
}
}
임무 완수프로젝트 를 시작 하고 콘 솔 인쇄 정 보 를 보 니 정시 작업 이 유효 합 니 다.spring boot 와 Scheduled 통합 완료.
문제 가 있다
그러나 나중에 문 제 를 발견 했다.몇 가지 임 무 를 동시에 테스트 한 결과 모든 임 무 는 같은 스 레 드 탱크 의 같은 스 레 드 에서 이 루어 진 것 을 발견 했다.실제 개발 과정 에서 우 리 는 당연히 모든 임무 가 한 라인 에서 실행 되 는 것 을 원 하지 않 는 다.
@Scheduled(cron="0/1 * * * * ? ") // 1
public void testCron1() {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info(sdf.format(new Date())+"********* 1 ");
}
@Scheduled(cron="0/2 * * * * ? ") // 2
public void testCron2() {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info(sdf.format(new Date())+"********* 2 ");
}
@Scheduled(cron="0/3 * * * * ? ") // 3
public void testCron3() {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info(sdf.format(new Date())+"********* 3 ");
}
@Scheduled(cron="0/4 * * * * ? ") // 4
public void testCron4() {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info(sdf.format(new Date())+"********* 4 ");
}
해결 방안
그렇다면 어떻게 다 중 스 레 드 로 설계 하여 병발 을 실현 합 니까?인터넷 에서 이런 해결 방안 을 본 적 이 있다.ScheduleConfig 설정 파일 을 통 해 Scheduling Configurer 인 터 페 이 스 를 실현 하고 setSchedulerfang 방법 을 다시 작성 합 니 다.설정 을 시도 해 보 았 습 니 다.
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
}
}
통합 성공이렇게 하면 다 중 스 레 드 병행 설정 이 완 료 됩 니까?우 리 는 프로젝트 를 시작 하여 콘 솔 출력 정 보 를 통 해 결 과 를 검증 한 결과 모든 작업 이 같은 스 레 드 탱크 에 있 지만 서로 다른 스 레 드 에서 이 루어 진 것 을 발견 했다.이 방안 이 완전히 실행 가능 하 다 는 것 을 설명 한다.그러면 우 리 는 spring boot 다 중 스 레 드 와 정시 임 무 를 완성 할 수 있다.
주석.
@Scheduled 가 지원 하 는 인자:
1.cron:cron 표현 식,지정 한 작업 이 특정 시간 에 실 행 됩 니 다.2.fixedDelay:지난 작업 이 완 료 된 후 얼마나 자주 다시 실 행 했 는 지,매개 변수 유형 은 long,단위 ms 임 을 나타 낸다.3.fixedDelayString:fixedDelay 의 의미 와 마찬가지 로 매개 변수 유형 만 String 으로 변 합 니 다.4.fixed Rate:일정한 주파수 에 따라 작업 을 수행 하고 매개 변수 유형 은 long,단위 ms 임 을 나타 낸다.5.fixed Rate String:fixed Rate 의 의미 와 같이 매개 변수 유형 만 String 으로 바 꿉 니 다.6.initialDelay:얼마나 지연 되 고 처음으로 임 무 를 수행 하 는 지 표시 합 니 다.매개 변수 유형 은 long 이 고 단위 ms 입 니 다.7.initialDelayString:initialDelay 의 의미 와 마찬가지 로 매개 변수 유형 만 String 으로 바 꿉 니 다.8.zone:시간 대,기본 값 은 현재 시간 대 입 니 다.일반적으로 사용 되 지 않 습 니 다.
Cron 표현 식 범례:
5 초 간격 으로 실행:*/5***?1 분 간격 으로 실행:0*/1***?매일 23 시 에 한 번 실행:0,23*?매일 새벽 1 시 에 한 번 씩 실행:0.01*?매달 1 일 새벽 1 시 에 한 번 씩 실행 합 니 다.0,01,1*?매월 마지막 날 23 시 에 한 번 실행:0,23 L*?매주 일요일 새벽 1 시 에 한 번 씩:0.01?*L 은 26 점,29 점,33 점 에서 한 번 집행 한다.0 26,29,33**?매일 0 시,13 시,18 시,21 시 에 한 번 씩 실행 합 니 다.0 0,0,13,18,21*?
사실 Cron 표현 식 도 걱정 하지 마 세 요.인터넷 에 많은 온라인 Cron 생 성기 가 있 습 니 다.우 리 는 온라인 생 성 기 를 통 해 요구 에 부 합 된 cron 을 생 성 할 수 있 고 편리 합 니 다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 spring-boot 다 중 스 레 드 와 정시 미 션 의 해결 방안 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.