[SPRING] 스프링 / 자바 스케줄링 태스크
SPRING스프링 / 자바 스케줄링 태스크
데이터베이스에서 레코드 묶음을 계속 가져 와서 큐에 넣을 스레드를 생성합니다. 이 스레드는 서버로드시 시작됩니다. 이 스레드가 항상 활성화되어 있어야합니다. 데이터베이스에 레코드가 없으면 잠시 기다린 후 다시 확인해야합니다. 나는 스프링 태스크 스케줄러를 사용하여이 스케줄을 잡으려고 생각 했었지만 그 일이 옳은지 확실하지 않은 것은 내 태스크가 한 번만 시작되기를 원하기 때문이다. Spring에서 이것을 구현하는 좋은 방법은 무엇입니까?
또한, 내 스레드가 (어떤 오류 또는 예외 조건으로 인해) 아래로 간다면 그것은 어떤 시간 후에 다시 인스턴스화되어야한다 경계 검사가 필요합니다.
스레드 통신 방법을 사용하여 java에서이 모든 작업을 수행 할 수 있지만 이러한 시나리오에 대해 Spring 또는 Java에서 사용할 수있는 것이 있으면 시도해보십시오.
모든 제안이나 포인터가 도움이 될 것입니다.
해결법
-
==============================
1.@Scheduled 주석을 사용하여 작업을 실행할 수 있습니다. 먼저 @Scheduled 주석이 달린 메소드로 클래스를 작성하십시오.
@Scheduled 주석을 사용하여 작업을 실행할 수 있습니다. 먼저 @Scheduled 주석이 달린 메소드로 클래스를 작성하십시오.
수업
public class GitHubJob { @Scheduled(fixedDelay = 604800000) public void perform() { //do Something } }
그런 다음이 클래스를 구성 파일에 등록하십시오.
spring-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <tx:annotation-driven/> <task:annotation-driven scheduler="myScheduler"/> <task:scheduler id="myScheduler" pool-size="10"/> <bean id="gitHubJob" class="org.tothought.spring.jobs.GitHubJob"/> </beans>
스케줄링에 대한 더 많은 정보는 Spring Docs를 방문하십시오.
-
==============================
2.
@Scheduled(fixedDelay=3600000) private void refreshValues() { [...] }
매 시간마다 한 번씩 작업이 실행됩니다. 무효 여야하며 인수를 받아 들일 필요가 없습니다. Spring의 자바 설정을 사용한다면 @EnableScheduling 주석을 @Configuration 클래스 중 하나에 추가해야한다.
-
==============================
3.쿼츠 스케쥴러를 사용해보십시오. http://quartz-scheduler.org/ 그러면 작업 실행 사이의 지속 시간을 지정할 수 있습니다. '처음'시간 만 실행하려는 코드 복제를 피하기 위해 클래스가 이전에 실행 된 경우 플래그 (부울 값)를 설정할 수 있습니다.
쿼츠 스케쥴러를 사용해보십시오. http://quartz-scheduler.org/ 그러면 작업 실행 사이의 지속 시간을 지정할 수 있습니다. '처음'시간 만 실행하려는 코드 복제를 피하기 위해 클래스가 이전에 실행 된 경우 플래그 (부울 값)를 설정할 수 있습니다.
-
==============================
4.Spring은 스케줄링 작업에 대한 out-ot-the-box 지원을 가지고있다. 다음은 최신 3.2.x 버전의 Spring 용 문서이지만 사용중인 버전에 대한 문서를 확인하십시오. 스케쥴링 작업을 위해 Quartz를 사용하는 것처럼 보입니다.
Spring은 스케줄링 작업에 대한 out-ot-the-box 지원을 가지고있다. 다음은 최신 3.2.x 버전의 Spring 용 문서이지만 사용중인 버전에 대한 문서를 확인하십시오. 스케쥴링 작업을 위해 Quartz를 사용하는 것처럼 보입니다.
-
==============================
5.귀하의 요구 사항은 쿼츠 또는 스프링 스케줄링 프레임 워크가 아주 잘 지원하는 정규 senario라고 생각합니다. 하지만 당신은 그것을 구체화하기위한 특정 접근법을 만들고 싶습니다. 내 제안은 그것을 간단하고 바보로 유지하는 것입니다. 스프링 scheudling은 항상 그것을 실행하는 대신 풀링하여 작업자 스레드를 활용할 것입니다.
귀하의 요구 사항은 쿼츠 또는 스프링 스케줄링 프레임 워크가 아주 잘 지원하는 정규 senario라고 생각합니다. 하지만 당신은 그것을 구체화하기위한 특정 접근법을 만들고 싶습니다. 내 제안은 그것을 간단하고 바보로 유지하는 것입니다. 스프링 scheudling은 항상 그것을 실행하는 대신 풀링하여 작업자 스레드를 활용할 것입니다.
통계에서는 작업자 클래스의 로그를 확인하기 쉽습니다. 웹 콘솔에서 통계를 보려면 작업자의 로그인을 데이터베이스에 기록해야합니다. 정상적인 방법으로 쉽게 만들 수 있다고 확신합니다.
from https://stackoverflow.com/questions/15511965/scheduling-task-in-spring-java by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RestEasy에 Spring beans 삽입하기 (0) | 2019.04.08 |
---|---|
[SPRING] Spring, Hibernate 및 LocalSessionFactoryBuilder를 사용하여 sessionFactory를 구성하십시오. (0) | 2019.04.08 |
[SPRING] 메소드 레벨 보안으로 AccessDenied 처리 (0) | 2019.04.08 |
[SPRING] 스프링 부트 이미지 업로드 및 검색 (0) | 2019.04.08 |
[SPRING] Spring MVC에서 기본 / 글로벌 날짜 형식을 ISO 8601로 설정합니다. (0) | 2019.04.08 |