2016-10-18 6 views
-2

私のアプリケーションでは、スケジュールされたイベントのチェックと処理を追加する必要があります。ビジネスロジックが発生したときには、特定の時間間隔でいくつかのアクションを発生させる必要があるトリガーを作成する必要があります。例:Springでスケジュールされたイベント処理の一般的なパターンは何ですか?

ユーザーが写真を投稿した場合、3日以内に好き嫌いがない場合は通知を受ける必要があります。

私はそれがSpringフレームワークの機能に依存するこのような活動の共通のパターンであるべきだと感じます。あなたには、いくつかなどを必要とする、あなたのメイン設定で

答えて

2

@Configuration 
@EnableScheduling 
public class HelloWorldConfig { ..} 

そして、あなたの中にあなたが何かをスケジュールする豆:

@Scheduled(fixedRate=1000) 
public void reload() { ..} 

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

が必ず含まれてくださいを参照してください@ XML設定を使用している場合は、EnableSchedulingまたは同等の機能を使用します。

+0

あなたの答えにリンクされたコンテンツの関連部分を含めてください。 –

+0

上記のコメントを参考に私の答えを更新しました。 –

0
@Component 
public class DemoExpirationEvent implements Runnable { 

    @Resource(name = "demoPhotoService") 
    private DemoExpirationService demoExpirationService; 

    @Resource(name = "demoExpirationTaskScheduler") 
    private TaskScheduler taskScheduler; 

    private Long id; 

    @Override 
    public void run() { 
     demoExpirationService.expiration(id);  
    } 

    public void schedule(Long id, Date dateToExpire){ 
     this.id = id; 
     taskScheduler.schedule(this, dateToExpire); 
    } 
} 

@Service("demoPhotoService") 
public class DemoPhotoServiceImpl implements DemoExpirationService, DemoPhotoService { 

    @Override 
    public void expiration(Long id) { 
     DemoPhoto photo = getPhoto(id); 
     photo.setExpirationDate(null); 
     savePhoto(photo); 
     notifyAuthorOfPhoto(id); 
    } 

    @Override 
    public void getPhoto(long id){ 
     //some implementation 
    } 

    @Override 
    public void savePhoto(DemoPhoto photo){ 
     //some implementation 
    } 

    @Override 
    public void notifyAuthorOfPhoto(long id){ 
     //some implementation 
    } 
} 


public class DemoAddedPhotoActivity { 

    @Resource(name = "demoExpirationEvent") 
    private DemoExpirationEvent demoExpirationEvent; 

    @Resource(name = "demoPhotoService") 
    private DemoPhotoService demoPhotoService; 

    public void execute(long id) throws Exception { 
     DemoPhoto photo = demoPhotoService.getPhoto(id); 
     Date expirationDate = new Date(System.currentTimeMillis() + 30000000000L); 

     photo.setExpirationDate(expirationDate); 
     demoPhotoService.savePhoto(photo); 
     demoExpirationEvent.schedule(id, expirationDate); 
    } 
} 
  • あなたのapplicationContext.xmlを内のレジスタのタスクスケジューラすぎ
<beans xmlns:task="http://www.springframework.org/schema/task" 
    xsi:schemaLocation="http://www.springframework.org/schema/task 
    http://www.springframework.org/schema/task/spring-task-4.1.xsd"> 

<task:scheduler id="demoExpirationTaskScheduler" pool-size="3"/> 
  • と豆の残りと(それは、コントローラ方法することができ、写真を追加することでアクティビティを呼び出します同じように実行する
関連する問題