spring에는 cron 표현식을 사용하지만, 너무 똑같은 시간(0초)에 동작되지 않게 할 수 있다. 



spring 3.x에는 어노테이션에서 spel을 지원하지 않아 XML로 설정해야 한다. 



<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:task="http://www.springframework.org/schema/task"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">


    <task:executor id="googleExecutor" pool-size="5-30" queue-capacity="10000"/>

    <task:annotation-driven scheduler="googleScheduler" executor="googleExecutor"/>


    <task:scheduler id="googleScheduler" pool-size="30"/>



    <task:scheduled-tasks scheduler="googleScheduler">

        <task:scheduled ref="googleFeedService" method="reloadCache" fixed-delay="#{new Double(T(java.lang.Math).random()*3000).intValue() + 600000}"/>

    </task:scheduled-tasks>


</beans>





반면, spring 4.3에서 어노테이션을 사용하면 다음과 같이 쉽게 사용할 수 있다.


@Scheduled(fixedRate = 600000, initialDelayString = #{ T(java.lang.Math).random() * 3000} )




Posted by '김용환'
,