2016-10-16 144 views
2

使用spring 4.3.1將任務調度到應用程序作用域bean中時出現問題。我的代碼是這樣的:Spring 4.3.1計劃任務運行兩次

@Component 
@ApplicationScope 
public class MyClassImpl implements MyClass { 

    @Scheduled(fixedDelayString = "60000") 
    @Transactional 
    public void method() { 
    do something... 
    } 
} 

計劃的方法運行兩次。我調試了應用程序上下文創建,並且似乎該bean只按預期加載了一次。 有人有一些建議嗎?

我加了BeanPostProcessor和我注意到,Spring框架實例2種豆一個名爲MyClassImpl和一個名爲scopedTarget.MyClassImpl如何避免這種行爲的任何想法?

+1

應用程序(方法)將從上次方法運行完成後運行多次。根據下一次啓動之間的配置1分鐘延遲。如果您希望白天運行一次,則需要「cron」。 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html – kuhajeyan

+0

我希望這種方法每分鐘運行一次,但實際上它會連續運行2次每分鐘1-2秒延遲 – TheOni

+0

@Transactional標記要創建的代理,因此創建的代理也會被解僱。可能是你想在外部方法調用方法()上註解@調度方法() – kuhajeyan

回答

0

解決創建不執行包含@Scheduled方法的任何接口(@Component註釋)的新類。