2017-04-15 3 views
2

Spring과 Hibernate를 사용하여 Java REST Web Service를 개발 중입니다. 향후 작업을 예약하기 위해 기능을 구현해야합니다. 예를 들어, 사용자가 내 애플리케이션에 가입 할 때 처음 6 개월 동안 자신의 계정에 100 개의 가상 크레딧을 부여해야합니다. 이처럼 좀 더 비슷한 기능이 있습니다.스프링 웹 서비스에서 예약 된 작업을 구현하는 방법은 무엇입니까?

나는이 기능으로 TimerTask을 사용할 수 있다고 생각하고 있습니다. 문제는 내가 가입 한 각 사용자에 대해 Timer을 만들면 그가 비활성 상태가되고 메모리에 스레드를 버리는 것처럼 보이는 특정 사용자의 Timer을 멈출 수 없다는 것입니다. 1000 명의 사용자가 등록하면 1000 TimerTask 스레드가 있습니다.

스프링 또는 자바를 사용하여 이러한 종류의 기능을 구현하는 방법은 무엇입니까? 스레드를 완전히 제어해야합니다. 스레드를 중지 할 수 있습니다. 원하는 경우.

+0

같은 @Scheduled 주석을 배치해야하고 당신은 오랫동안 다시 시작 할 필요 또는 실패 강제 재시작없이 프로그램이 실행되고 있는지입니까? 나는이 데이터를 어딘가에 저장하고 정기적으로 시간을 확인하는 솔루션이 필요하다고 생각한다. –

+0

예. Tomcat Server를 사용하고 있습니다. 그것은 언젠가 충돌하고 내려갈 것입니다, 그러면 서버를 다시 시작해야합니다. – Mdumanoj

+0

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html – rvit34

답변

0

단일 스레드를 사용하여 @scheduled annotation과 최소한의 XML 구성으로 작업을 수행 할 수 있습니다. reference에 대한 링크를 남겨 두겠습니다.

당신은 당신의 서비스 방법을 만들고

@Scheduled(cron = "0 15 10 15 * ?") 
public void scheduleTaskUsingCronExpression(){ 
long now = System.currentTimeMillis()/1000; 
System.out.println("schedule tasks using cron jobs - " + now); 
} 
+0

예 이것을 사용하여 작업을 예약 할 수 있습니다. 그러나 나는 어떻게 그 일을 멈출 수 있습니까? Job이 각각 10 분 동안 실행되도록 계획하고 어떤 이유로이 실행을 중지하려면 어떻게해야합니까? – Mdumanoj

+0

작업을 중단하지 마십시오! 대신 예약 된 작업 내에 부울 검사를하십시오! 그리고 부울 변수를 변경하여 서비스를 중지하고 시작할 수 있습니다 ... 친절하게 upvote하고 작동하는 경우 내 대답을 수락하십시오! –

+0

이것이 올바른 방법이라고 생각하지 않습니다. 사실'TimerTask'가 실행 중이며 영원히 계속 실행되기 때문입니다. – Mdumanoj

관련 문제