黎明时自动运行批处理

时间:2017-08-11 16:07:44

标签: java xml spring-batch batch-processing jobs

我创建了一个完整且功能齐全的批处理过程,我手动运行Launcher.java,它有一个main方法并执行我定义的作业(这个作业我在xml中定义它并将它作为参数传递给我主要),这非常有效,现在我想把它投入生产,为此我需要配置这个过程每天早上在西班牙运行,我该怎么办?这是我的启动器(如果我右键单击运行as-> java应用程序,它工作正常,但我如何按需要进行批量运行?)

 public final class Launcher {

private static final String LOG_DECORATOR = "****************************************.";
private static final Logger LOG = Logger.getLogger("batch");
private static final Long MIL = 1000L;

private Launcher(){
    throw new UnsupportedOperationException();
}

public static void main(String[] args){

    LOG.info(LOG_DECORATOR);
    LOG.info(" INICIO DEL PROCESO ");
    LOG.info(LOG_DECORATOR);

    LOG.info("Cargando datos de configuracion");

    final ApplicationContext applicationContext = new ClassPathXmlApplicationContext(args[0]);

    final PropertyFacade property = applicationContext.getBean(PropertyFacade.class);
    Assert.notNull(property, "Datos de configuracion no cargados correctamente");
    final String entorno = property.property("entorno");
    LOG.info("Entorno: ".concat(entorno));
    final JobLauncher jobLauncher = (JobLauncher) applicationContext.getBean("jobLauncher");
    final Job job = (Job) applicationContext.getBean("job");
    long tiempoComenzar;
    long tiempoTerminar;
    tiempoComenzar = System.currentTimeMillis();
    try {
        final JobExecution execution = jobLauncher.run(job, new JobParameters());
        LOG.info("Job Status : " + execution.getStatus());
        LOG.info("Job completed");
    } catch (JobExecutionAlreadyRunningException e) {
        LOG.info("Error Launcher: ".concat(e.toString()));
        LOG.error("Exception Launcher",e);
    } catch(IllegalArgumentException e){
        LOG.info("Error Launcher: ".concat(e.toString()));
        LOG.error("Exception Launcher",e);
    } catch(JobInstanceAlreadyCompleteException e){
        LOG.info("Error Launcher: ".concat(e.toString()));
        LOG.error("Exception Launcher",e);
    } catch(JobParametersInvalidException e){
        LOG.info("Error Launcher: ".concat(e.toString()));
        LOG.error("Exception Launcher",e);
    } catch(JobRestartException e){
        LOG.info("Error Launcher: ".concat(e.toString()));
        LOG.error("Exception Launcher",e);
    }finally {
        ((ConfigurableApplicationContext) applicationContext).close();
        tiempoTerminar = System.currentTimeMillis();
        final long tiempoDedicado = (tiempoTerminar - tiempoComenzar) / MIL;
        LOG.info(
                "Fin. Tiempo dedicado a la consulta: ".concat(String.valueOf(tiempoDedicado)).concat(" segundos."));
        LOG.info(LOG_DECORATOR);
        LOG.info(" FIN DEL PROCESO ");
        LOG.info(LOG_DECORATOR);
    }

}

}

这是工作

click me

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

工作安排是一个单独的问题&您可以根据您拥有的部署模型选择您的选项。

1.如果您的输出是一个需要作为独立应用程序运行的简单jar文件,您可以使用cron这样简单的工具在UNIX *系统上安排它。

你可以继续使用像石英等更多的专业工具,正如一些评论中提到的那样。

Here是更多讨论。

2.如果要在某种服务器上部署,那么您只需使用@Scheduled注释编写自己的调度程序即可。 Here是详细的文档,这种调度提供了很少的选项,如cron表达式,固定延迟等。

我在Weblogic中部署了一个使用选项#2的作业。您需要使用@ScheduledJobLauncher方法编写作业启动逻辑。我使用的是cron表达式,并通过属性将cron表达式外部化。部署您的应用后起来,这个安排会自动启动你的工作。

希望它有所帮助!!