2016-04-04 5 views
1

Мое приложение написано с помощью Spring, Hibernate (JPA), JBOSS 9.0.0.GA & JBOSS EAP 6.4. В POM.xml я указал упаковку на WAR.Использование планировщика задач Windows для автоматизации выполнения WAR-файла

У меня есть 2 функции, которые я хотел бы автоматизировать:

а. Чтение CSV - чтение из таблицы CSV и таблица обновлений в БД

package com.fwd.pmap.memberInterfaceFile; 

/* all imports */ 

public class CsvReader 
{ 
    public void importInterfaceFile() throws Exception 
    { 
     // do processing here 
    } 
} 

b. CSV Writer - чтение из БД и вывод CSV файл

package com.fwd.pmap.memberInterfaceFile; 

/* all imports */ 

public class CsvWriter 
{ 
    public void generateInterfaceFile() throws Exception 
    { 
     // do processing here 
    } 
} 

Как можно автоматизировать обе функции выше для запуска на определенное время каждый день? Например:

  1. CSV Считыватель для запуска ежедневно @ 05:00 AM
  2. CSV Writer для запуска ежедневно @ 07:00 AM

Project Structure

+0

Они должны запускаться внутри вашего приложения? Если да, взгляните на [Quartz Scheduler] (https://www.quartz-scheduler.org/) .... – khmarbaise

+0

@khmarbaise Я предпочитаю не писать расписание в приложении, поэтому я изучаю, возможен через планировщик задач Windows. Приложение в конечном итоге будет развернуто на сервере (также будет работать EAP), и я хотел бы настроить задачу расписания с самого сервера. – Maruli

+0

Я думаю, что возможно, что в Windows Task Scheduler запланировано выполнение сценария или приложения, но для того, чтобы назначить функцию в приложении, это невозможно. – Hohenheim

ответ

0

Наконец решили использовать Spring Scheduling, как он не требует большого количества кодирования, а также XML.

Это класс компонента, где я график 2 рабочих мест для работы на 5AM & 6AM ежедневно:

package com.fwd.pmap.scheduler; 

import org.springframework.scheduling.annotation.Scheduled; 
import org.springframework.stereotype.Component; 

import com.fwd.pmap.memberInterfaceFile.CsvReader; 
import com.fwd.pmap.memberInterfaceFile.CsvWriter;; 

@Component 
public class MyBean { 

    @Scheduled(cron="0 0 5 * * *") 
    public void importInterfaceFile() 
    { 
     CsvReader reader = new CsvReader(); 
     try { 
      reader.importInterfaceFile(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Scheduled(cron="0 0 6 * * *") 
    public void generateInterfaceFile() 
    { 
     CsvWriter writer = new CsvWriter(); 
     try { 
      writer.generateInterfaceFile(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Вот класс конфигурации:

package com.fwd.pmap.scheduler; 

import java.util.concurrent.Executor; 
import java.util.concurrent.Executors; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.scheduling.annotation.EnableScheduling; 
import org.springframework.scheduling.annotation.SchedulingConfigurer; 
import org.springframework.scheduling.config.ScheduledTaskRegistrar; 

import com.fwd.pmap.scheduler.MyBean; 

@Configuration 
@EnableScheduling 
public class SchedulerConfig implements SchedulingConfigurer { 

    @Bean 
    public MyBean bean() { 
     return new MyBean(); 
    } 

    @Override 
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
     taskRegistrar.setScheduler(taskExecutor()); 
    } 

    @Bean(destroyMethod="shutdown") 
    public Executor taskExecutor() { 
     return Executors.newScheduledThreadPool(4); 
    } 
} 

И основной класс для выполнения выше:

package main; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 

import com.fwd.pmap.scheduler.SchedulerConfig; 

public class Main { 
    static Logger LOGGER = LoggerFactory.getLogger(Main.class); 

    @SuppressWarnings({ "unused", "resource" }) 
    public static void main(String[] args) { 
     AbstractApplicationContext context = new AnnotationConfigApplicationContext(SchedulerConfig.class); 
    } 
}