2017-08-11 5 views
0

私は完全に機能的なバッチプロセスを作成しました。これはmainメソッドを持つLauncher.javaを手動で実行し、定義したジョブを実行します(このジョブをxmlで定義し、それは私の主張の主張です)、それは完璧にうまくいっています。今、私はそれをプロダクションに持ち込みたいと思っています。そのために、スペインの午前中に毎日実行するようにプロセスを設定する必要があります。これは、(私が実行されたまま> 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

私はあなたの助けに感謝。

+0

あなたのコードは質問には関係ありません、関連するものは何ですか?あなたのコードはどのオペレーティングシステムで動作しますか?タスクスケジューラが組み込まれていますか? (例えばcronのような) – alfasin

+0

答えてくれてありがとう、Windowsで実行する、いいえ、私が理解しようとしていること、あるいはやり方を知っているタスクのプログラマーについては分かりません。ジョブは3つのステップクラス。 Java(3task) – jaxonjma

+0

クォーツを使用してください。 cronに似たスケジューラーを設定します。 http://www.quartz-scheduler.org/ – Dakoda

答えて

0

ジョブスケジューリングは別の問題です&あなたはどのような導入モデルの種類に応じてオプションを選ぶことができます。

1.出力がスタンドアロンアプリケーションとして実行する必要のある単純なjarファイルである場合、単純なツールとしてcronを使用してUNIX *システムでスケジュールすることができます。

いくつかのコメントに記載されているように、クォーツなどのより多くの職業のツールで続けることができます。

Hereさらに詳しい説明があります。

2.何らかの種類のサーバーにデプロイする場合は、@Scheduled注釈を使用して独自のスケジューラーを作成できます。 Hereは詳細なドキュメントであり、この種のスケジューリングでは、cronのような表現、固定遅延などのいくつかのオプションが提供されます。

私はオプション2を使用するWeblogicにジョブをデプロイしました。この@Scheduledの方法では、JobLauncherを使用しています。私はcron式を使用しており、そのcron式をプロパティで外部化しています。あなたのアプリが展開されたら&アップ、このスケジューリングは自動的にあなたの仕事を始めるでしょう。

希望すると助かります!

関連する問題