java运行时间间隔_Java:安排作业按时间间隔运行
java運行時間間隔
最近,我花了一些時間圍繞Neo4j版本之間的滾動升級構建了一組測試,作為其中的一部分,我想記錄升級過程中集群的狀態(tài)。
測試的主線程會等待升級完成,因此我想每隔幾秒鐘登錄另一個線程。 Alistair將我指向ScheduledExecutorService ,效果很好。
我結束了一個大致如下的測試:
LogAllTheThings每秒調用一次,它記錄Neo4j服務器作為JMX屬性公開的KernelVersion,InstanceId,LastCommittedTxId和Role。
如果我們對本地Neo4j集群運行它,我們將看到類似以下內容:
Sun Nov 17 22:31:55 GMT 2013: {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} Sun Nov 17 22:31:56 GMT 2013: {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} Sun Nov 17 22:31:57 GMT 2013: {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} Sun Nov 17 22:31:58 GMT 2013: {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} Sun Nov 17 22:31:59 GMT 2013: {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} ... removed for brevity下一步是同時獲取集群所有成員的屬性,然后我們可以引入另一個ExecutorService ,該線程的線程池為3,以便它將同時評估(至少接近)每臺計算機:
static class LogAllTheThings implements Runnable{private ExecutorService executorService = Executors.newFixedThreadPool( 3 );@Overridepublic void run(){List<URI> machines = new ArrayList<>( );machines.add(URI.create( "http://localhost:7474/" ));machines.add(URI.create( "http://localhost:7484/" ));machines.add(URI.create( "http://localhost:7494/" ));Map<URI, Future<Map<String, Object>>> futureJmxProperties = new HashMap<>( );for ( final URI machine : machines ){Future<Map<String, Object>> futureProperties = executorService.submit( new Callable<Map<String, Object>>(){@Overridepublic Map<String, Object> call() throws Exception{try{return selectedProperties( client(), machine );}catch ( Exception ignored ){ignored.printStackTrace();return new HashMap<>();}}} );futureJmxProperties.put( machine, futureProperties );}Date time = new Date( System.currentTimeMillis() );System.out.println( time );for ( Map.Entry<URI, Future<Map<String, Object>>> uriFutureEntry : futureJmxProperties.entrySet() ){try{System.out.println( "==> " + uriFutureEntry.getValue().get() );}catch ( Exception ignored ){}}}// other methods the same as above}我們將每個作業(yè)提交給ExecutorService并收到一個Future ,并將其存儲在地圖中,然后再檢索其結果。 如果運行,我們將看到以下輸出:
Sun Nov 17 22:49:58 GMT 2013 ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=2, LastCommittedTxId=18, Role=slave} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=3, LastCommittedTxId=18, Role=slave} Sun Nov 17 22:49:59 GMT 2013 ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=2, LastCommittedTxId=18, Role=slave} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=3, LastCommittedTxId=18, Role=slave} Sun Nov 17 22:50:00 GMT 2013 ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=1, LastCommittedTxId=18, Role=master} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=2, LastCommittedTxId=18, Role=slave} ==> {KernelVersion=Neo4j - Graph Database Kernel 2.0.0-M06, InstanceId=3, LastCommittedTxId=18, Role=slave}... removed for brevity 總體而言,該方法效果很好,盡管我總是愿意學習有更好的方法!
翻譯自: https://www.javacodegeeks.com/2013/11/java-schedule-a-job-to-run-on-a-time-interval.html
java運行時間間隔
總結
以上是生活随笔為你收集整理的java运行时间间隔_Java:安排作业按时间间隔运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人加工念什么 这个字是什么意思
- 下一篇: (金泉一号备案)