2015-05-18 3 views
1

Я создал весенние пакетные задания, и для запуска того же мы предоставили клиент отдыха, который передаст имя задания в URL-адресе. Пример: http://localhost:8080/ProjectName/launcher/jobs/updateFeedsJob Этот url запустит работу updateFeedsJob. Теперь проблема связана с удалением URL-адреса, то же самое задание работает несколько
раз (5), по одному раз в минуту в unix после развертывания того же в tomcat7
, в то время как локально он работает нормально. Кроме того, общая работа будет завершена в течение 4-5 минут. У меня много googled, но нет правильного решения для этого же.Весеннее пакетное задание работает несколько раз

Любые предложения.

Код:

Launcher класс:

@Path("/launcher") 
public class LaunchController { 
static String[] springConfig = { "spring/batch/jobs/job-update*.xml" }; 

@GET 
@Path("/semjobs/{jobname}") 
@Produces("application/xml") 
public Response getScmJobs(@PathParam("jobname") String jobname) { 
    { 
     JobDetails jobdetails = new JobDetails(); 
     ApplicationContext context = new ClassPathXmlApplicationContext(springConfig); 
    JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); 
    String category = EMPTY_STRING; 
    jobdetails.setJobname(jobname); 
    Job job = (Job) context.getBean(jobname); 
    JobExecution executionall = null; 
    String inputpath = EMPTY_STRING; 
       try { 
        inputpath = loadPropertiesFile(jobname); 
       } catch (Exception e) { 
        LOGGER.error("Error occured while loading the properties file -> " + e); 
       } 
       executionall = jobLauncher.run(job, new JobParametersBuilder().addString("inputFile", inputpath).addDate("date", new Date()).toJobParameters());     
       if (executionall != null) { 
     jobdetails.setJobstatus(executionall.getExitStatus().getExitCode()); 
        jobdetails.setJobid(executionall.getJobId()); 
       } 
     } catch (Exception e) { 
      LOGGER.error("Error occured while launching the job -> " + e); 
     } 

     return Response.status(200).entity(jobdetails).build(); 
    } 

Spring пакетное задание является общим с flatfileitemreader (чтение из CSV), процессор (обновление API AdWords, детали подачи, этот шаг занимает около 40 сек для.. каждая запись в файле csv, которая содержит около 40 записей) и настраиваемый писатель, который обновляет записи в db.

web.xml

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
    <!-- Auto scan REST service --> 
    <context-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <servlet> 
     <servlet-name>resteasy-servlet</servlet-name> 
     <servlet-class> 
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
     </servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>resteasy-servlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

Предоставьте соответствующие примеры кода, поскольку ваш рассказ слишком широк. –

ответ

0

хорошо я мог бы иметь решение - но это не является подходящим один.

Вы можете добавить Listerine работы к основной работе, которая заключить приложение

Вы можете позвонить System.exit (0) - в методе после завершения работы этого у слушателя.

+0

Работа не будет чисто выходить из этого подхода. Мне нужно отобразить правильное сообщение в случае успеха или неудачи работы. – Nitish

+0

, который также может обрабатываться в прослушивателе - на слушателе вы можете проверить статус выхода задания - ExitStatus.COMPLETED или ExitStatus.FAILED. –

+0

, если задание выполнено - затем дайте сообщение об успешном завершении и вызовите system.exit (0), если неудачное задание задания выдаст сообщение об ошибке, а затем вызовите system.exit (0) –

Смежные вопросы