2015-09-04 74 views
7

是否有可能在運行時在Spring Batch中獲取已定義作業的列表而不使用數據庫?也許可以從jobRepository bean或某些類似的對象獲取這些元數據?Spring批處理:在運行時獲取已定義作業的列表

+0

你所說的「定義的工作」的意思是?本地應用程序環境中的作業?作業存儲庫中的作業?其他一些定義? –

+0

我的意思是我在本地應用程序上下文中定義的所有工作 –

+1

您可以使用像context.getBeanNamesForType(Job.class)這樣簡單的操作來完成此任務。 –

回答

5

可以使用JobExplorer.getJobNames()檢索所有作業名稱的列表。

你首先要確定使用JobExplorerFactoryBeanjobExplorer豆:

<bean id="jobExplorer" class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

,然後當你需要它,你可以注入這個bean。

+0

它的工作原理,但它使用分貝。有沒有辦法找到它沒有數據庫? –

1

獲取配置爲bean的作業名稱列表的替代策略可以使用ListableJobLocator。

@Autowired 
ListableJobLocator jobLocator; 

.... 

jobLocator.getJobNames(); 

這不需要作業存儲庫。

0

我使用這些代碼列出並執行作業

private String jobName = ""; 
    private JobLauncher jobLauncher = null; 
    private String selectedJob; 
    private String statusJob = "Exit Status : "; 
    private Job job; 
    ApplicationContext context; 
    private String[] lstJobs; 

    /** 
    * Execute 
    */ 
    public ExecuteJobBean() { 
     this.context = ApplicationContextProvider.getApplicationContext(); 
     this.lstJobs = context.getBeanNamesForType(Job.class); 


     if (jobLauncher == null) 
      jobLauncher = (JobLauncher) context.getBean("jobLauncher"); 
    } 

    /** 
    * Execute 
    */ 
    public void executeJob() { 

     setJob((Job) context.getBean(this.selectedJob)); 

     try { 
      statusJob = "Exit Status : "; 
      JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters(); 
      JobExecution execution = jobLauncher.run(getJob(), jobParameters); 
      this.statusJob = execution.getStatus() + ", "; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      this.statusJob = "Error, " + e.getMessage(); 
     } 
     this.statusJob += " Done!!"; 
    } 
相關問題