2016-01-07 43 views
3

我上啓動應用程序spring-batch工作開始使用如何在啓動tomcat服務器時運行一個長時間的批處理作業?

spring.batch.job.names=MyJob

@Configuration 
public class MyJob { 
    @Bean 
    public Job testJob() throws IOException { 
     return jobBuilderFactory.get(MyJob.class.getSimpleName()) 
       .start(import()) 
       .build(); 
    } 
} 

很不幸,這在某種程度上延緩了tomcat服務器啓動。這項工作有幾分鐘的運行時間,因此我得到了以下錯誤:

Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

問:我怎麼能不運行tomcat的防止啓動這項工作?例如運行異步的工作?

+0

根據您當前的spring-batch配置,有不同的方法來完成這項工作。你可以發佈你現在的東西嗎? –

+0

這只是一個簡單的工作類,並且寫入配置的application.properties來啓動作業。 – membersound

回答

0

您可以使用配置爲fixedDelay@Scheduled註釋。

有關更多信息,請參閱參考資料中的Task Execution and Scheduling

我結束了使用這一解決方案推出了緩存熱身剛剛啓動時:

private boolean isFirstTime = true; 

@Scheduled(fixedDelay = 60000) 
protected void refreshCachesStartup(){ 
    if(isFirstTime){ 
     // your code 

     isFirstTime = false; 
    } 
} 

編輯:見this問題上的說法更具體的看法。

+0

但是'fixedDelay'會定期執行。我只想在啓動時運行這個工作。 – membersound

+0

對,看我的編輯 –

+0

嗯,感覺像一個黑客。我可以定義一個非常長的fixedDelay時期,但也許有一個更優雅的解決方案... ... – membersound

相關問題