2015-09-04 14 views
7

Db kullanmadan çalışma zamanında Spring Batch içinde tanımlanmış işlerin bir listesini almak mümkün mü? Belki bu meta verileri jobRepository fasulyeden veya benzer bir nesneden elde etmek mümkün müdür?Yay Batch: çalışma zamanında tanımlanan işlerin listesini alın

+0

yürütmek için bu kodu kullanabilirsiniz? Yerel uygulama bağlamında işler? İş deposunda iş var mı? Başka bir tanım? –

+0

Yerel uygulama bağlamında tanımladığım tüm işler –

+1

Bunu, 'context.getBeanNamesForType (Job.class) 'gibi basit bir şeyle yapabilirsiniz. iş düzenli fasulye olmadığından –

cevap

5

O JobExplorer.getJobNames() kullanarak tüm iş isimlerin listesini almak mümkündür.

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

ve ihtiyacınız olduğunda o zaman bu fasulye enjekte edebilir

Önce JobExplorerFactoryBean kullanarak jobExplorer fasulye tanımlamak zorunda.

+0

Çalışıyor, ancak db kullanıyor. Bunu db olmadan bulmanın yolu var mı? –

1

Alternatif strateji bir ListableJobLocator kullanabilirsiniz fasulye gibi yapılandırılmış iş adlarının listesini almak için.

@Autowired 
ListableJobLocator jobLocator; 

.... 

jobLocator.getJobNames(); 

Bu, iş deposu gerektirmez.

0

sana "tanımlı işleri" ne demek istiyorsunuz listelemek ve işleri

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!!"; 
    } 
İlgili konular