当前位置: 首页 > 知识库问答 >
问题:

Spring Batch(2.2)Java Config+Quartz作为调度程序

姬乐
2023-03-14

我试图使用Spring batch Java配置和Quartz作为调度程序来编写一个批处理作业。

@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchProcessingConfig {

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private EntityManagerFactory entityManagerFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

    @Bean
@Qualifier("theJob")
public Job job() {
    return jobBuilderFactory.get("theJobName")
            .start(jobStep()).build();
}

@Bean
public Step jobStep() {
    StepBuilder stepBuilder = stepBuilderFactory.get("stepName");
    SimpleStepBuilder<Person, Person> chunk = stepBuilder
            .<Person, Person> chunk(10);
    return chunk.reader(personeReader())                
            .processor(jobProcessor()).build();
}

    @Bean
public JobProcessor<Person, Person> invoiceRejobProcessorminderProcessor() {
    return new JobProcessor();
}

我可以探索的所有示例都通过扩展QuartzJobBean创建了自己的作业类,但我希望上面配置的作业被调度运行。

如何对调度程序功能进行单元测试

共有1个答案

黄隐水
2023-03-14

我就是这样做的,当我有这样的要求时

public class Schedule {
    public Schedule()throws Exception{
       SchedulerFactory sf=new StdSchedulerFactory();
       Scheduler sched=sf.getScheduler();
       sched.start();
       JobDetail jd=new JobDetailImpl("myjob",sched.DEFAULT_GROUP,QuartzJob.class);
       SimpleTrigger st=new SimpleTriggerImpl("mytrigger",sched.DEFAULT_GROUP,new Date(),
                  null,SimpleTrigger.REPEAT_INDEFINITELY,60L*1000L);
       sched.scheduleJob(jd, st);
    }
    public static void main(String args[]){
       try{
         new Schedule();
       }catch(Exception e){}
    }
}

=====================================

public class QuartzJob implements Job{

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
          String[] springConfig  = 
                {   
                    "resources\\spring-batch.xml" ,"SPRING_BATCH_JOB_NAME"
                };

            CommandLineJobRunner.main( springConfig );
            System.out.println("Done");

    }

}
 类似资料:
  • 问题内容: 请考虑这个例子。 一个示例Web应用程序要求其启动。调度程序配置为将其作业存储在DB中。 该应用程序被复制到六个Web服务器上。 因此,如果我们启动六个Web服务器,则在单个DB上将有六个具有相同名称的调度程序。如https://quartz- scheduler.org/documentation/quartz-2.1.x/cookbook/MultipleSchedulers中所述

  • 请考虑这个例子。 示例web应用程序在启动时调用。配置为将其作业存储在DB中的计划程序。 该应用程序被复制到六个Web服务器上。 还有更好的方法吗?!

  • 有人能帮帮我吗。我对Quartz调度器很陌生。

  • 1、调度的概念 在多道程序系统中,进程的数量往往多于处理器的个数,进程争用处理器的情况在所难免。处理器调度是对处理器进行分配,就是从就绪队列中,按照一定的算法,选择一个进程并将处理器分配给他运行,以实现进程的并发执行。 处理器调度是多道程序操作系统的基础,它是操作系统设计的核心问题。 一个作业从提交开始知道完成,往往要经历一下三级调度: 1)作业调度。作业调度又称高级调度:其主要任务是按一定的原则

  • 我使用Quartz Scheduler(使用JobDetailFactoryBean)和Spring来安排一些作业。现在我通过XmlApplicationContext通过spring配置实现了这一点,我必须将其更改为AnnotationConfigApplicationContext。那么,我如何在AnnotationConfigApplicationContext中实现这个cronjob呢。这

  • 我们有一个使用Spring Framework在Tomcat中运行的Web应用程序。我们需要为循环操作添加一些计划作业。为此,我们遇到了Quartz Scheduler,并遵循了使用Quartz with Spring配置作业的教程,并按预期计划并运行了作业。 所以我们有一些任务是在应用程序启动时安排的。现在我们希望用户手动运行作业并更改作业的触发器,但是我们需要将这些更改持久化到数据库中。因此,