public static JobListenerConfiguration createJobListenerConfiguration(final String sourceFolder, final String pattern, final JobListenerType jobListenerType) { final JobListenerConfiguration jobListenerConfiguration = new JobListenerConfiguration(); jobListenerConfiguration.setJobListenerType(jobListenerType); jobListenerConfiguration.setTaskExecutorType(TaskExecutorType.SYNCHRONOUS); jobListenerConfiguration.setSourceFolder(sourceFolder); jobListenerConfiguration.setFilePattern(pattern); jobListenerConfiguration.setPollerPeriod(1000L); jobListenerConfiguration.setListenerStatus(ListenerStatus.STOPPED); return jobListenerConfiguration; } }
public static List<ValueRecord> map(final JobListenerConfiguration jobListenerConfiguration, final Long jobConfigurationId) { final List<ValueRecord> valueRecords = new ArrayList<>(); final ValueRecord beanName = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.BEAN_NAME, jobListenerConfiguration.getBeanName()); final ValueRecord filePattern = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.FILE_PATTERN, jobListenerConfiguration.getFilePattern()); final ValueRecord pollerPeriod = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.POLLER_PERIOD, jobListenerConfiguration.getPollerPeriod()); final ValueRecord sourceFolder = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.SOURCE_FOLDER, jobListenerConfiguration.getSourceFolder()); final ValueRecord listenerStatus = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.STATUS, jobListenerConfiguration.getListenerStatus().getValue()); final ValueRecord listenerType = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.LISTENER_TYPE, jobListenerConfiguration.getJobListenerType().getId()); final ValueRecord executorType = new ValueRecord(jobConfigurationId, JobListenerConfigurationKey.TASK_EXECUTOR_TYPE, jobListenerConfiguration.getTaskExecutorType().getId()); valueRecords.add(beanName); valueRecords.add(filePattern); valueRecords.add(pollerPeriod); valueRecords.add(sourceFolder); valueRecords.add(listenerStatus); valueRecords.add(listenerType); valueRecords.add(executorType); return valueRecords; } }
@Override public void startJobConfiguration(final Long jobConfigurationId) { try { final JobConfiguration jobConfiguration = this.jobConfigurationRepository.getJobConfiguration(jobConfigurationId, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); final JobSchedulerConfiguration jobSchedulerConfiguration = jobConfiguration.getJobSchedulerConfiguration(); final JobListenerConfiguration jobListenerConfiguration = jobConfiguration.getJobListenerConfiguration(); if (jobSchedulerConfiguration != null) { final String beanName = jobSchedulerConfiguration.getBeanName(); this.schedulerService.schedule(beanName, Boolean.FALSE); jobConfiguration.getJobSchedulerConfiguration().setSchedulerStatus(SchedulerStatus.RUNNING); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } else if (jobListenerConfiguration != null) { final String beanName = jobListenerConfiguration.getBeanName(); this.listenerService.activateListener(beanName, Boolean.FALSE); jobConfiguration.getJobListenerConfiguration().setListenerStatus(ListenerStatus.ACTIVE); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } } catch (final NoSuchJobConfigurationException e) { throw new SpringBatchLightminApplicationException(e, e.getMessage()); } }
@Test public void getJobConfigurationWithListenerIT() throws NoSuchJobConfigurationException { final JobListenerConfiguration jobListenerConfiguration = DomainTestHelper.createJobListenerConfiguration ("src/test/", "*.txt", JobListenerType.LOCAL_FOLDER_LISTENER); jobListenerConfiguration.setBeanName("testBean"); final JobConfiguration jobConfiguration = DomainTestHelper.createJobConfiguration(jobListenerConfiguration); final JobConfiguration addedJobConfiguration = this.getJobConfigurationRepository().add(jobConfiguration, APPLICATION_NAME); assertThat(addedJobConfiguration).isNotNull(); assertThat(addedJobConfiguration.getJobConfigurationId()).isNotNull(); assertThat(addedJobConfiguration.getJobListenerConfiguration()).isNotNull(); final JobConfiguration fetchedJobConfiguration = this.getJobConfigurationRepository().getJobConfiguration (addedJobConfiguration.getJobConfigurationId(), APPLICATION_NAME); assertThat(fetchedJobConfiguration.getJobConfigurationId()).isEqualTo(addedJobConfiguration.getJobConfigurationId()); }
private void initIntegrationFlow() { this.integrationFlow = IntegrationFlows .from(Files.inboundAdapter(new File(this.jobListenerConfiguration.getSourceFolder())) .filter(this.fileFileListFilter) .scanEachPoll(Boolean.TRUE) .get(), e -> { e.poller(Pollers.fixedRate(this.jobListenerConfiguration.getPollerPeriod()).maxMessagesPerPoll(1000)); e.autoStartup(Boolean.TRUE); }) .transform(this.transformer, e -> e.autoStartup(Boolean.TRUE)) .handle(this.jobLaunchingMessageHandler) .channel(MessageChannels.direct()) .handle(new JobExecutionFinishedMessageHandler()) .get(); }
jobConfiguration.getJobSchedulerConfiguration().setBeanName(TEMP_BEAN_NAME + "_SCHEDULER_" + jobConfiguration.getJobConfigurationId()); } else if (jobConfiguration.getJobListenerConfiguration() != null) { jobConfiguration.getJobListenerConfiguration().setBeanName(TEMP_BEAN_NAME + "_LISTENER_" + jobConfiguration .getJobConfigurationId()); addedJobConfiguration.getJobListenerConfiguration().setBeanName(beanName); if (ListenerStatus.ACTIVE.equals(addedJobConfiguration.getJobListenerConfiguration().getListenerStatus())) { this.listenerService.activateListener(beanName, Boolean.TRUE);
@Override public void updateJobConfiguration(final JobConfiguration jobConfiguration) { jobConfiguration.validateForUpdate(); try { final JobConfiguration existingJobConfiguration = this.jobConfigurationRepository.getJobConfiguration(jobConfiguration.getJobConfigurationId(), this.springBatchLightminCoreConfigurationProperties.getApplicationName()); if (existingJobConfiguration.getJobSchedulerConfiguration() != null) { final String existingBeanName = existingJobConfiguration.getJobSchedulerConfiguration().getBeanName(); jobConfiguration.getJobSchedulerConfiguration().setBeanName(existingBeanName); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); this.schedulerService.refreshSchedulerForJob(jobConfiguration); if (SchedulerStatus.RUNNING.equals(jobConfiguration.getJobSchedulerConfiguration().getSchedulerStatus())) { this.schedulerService.schedule(jobConfiguration.getJobSchedulerConfiguration().getBeanName(), Boolean.TRUE); } else { log.info("Scheduler not started, no scheduling triggered!"); } } else if (existingJobConfiguration.getJobListenerConfiguration() != null) { final String existingBeanName = existingJobConfiguration.getJobListenerConfiguration().getBeanName(); jobConfiguration.getJobListenerConfiguration().setBeanName(existingBeanName); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); this.listenerService.refreshListenerForJob(jobConfiguration); } } catch (final NoSuchJobConfigurationException e) { log.error(e.getMessage()); throw new SpringBatchLightminApplicationException(e, e.getMessage()); } }
private void initFileListFilter() throws Exception { this.fileFileListFilter = new CompositeFileListFilter<>(); this.fileFileListFilter.addFilter(new AcceptOnceFileListFilter<>()); this.fileFileListFilter.addFilter(new IgnoreHiddenFileListFilter()); this.fileFileListFilter.addFilter(new SimplePatternFileListFilter(this.jobListenerConfiguration.getFilePattern())); }
public FolderListener(final ListenerConstructorWrapper listenerConstructorWrapper) { this.jobConfiguration = listenerConstructorWrapper.getJobConfiguration(); this.job = listenerConstructorWrapper.getJob(); this.jobParameters = listenerConstructorWrapper.getJobParameters(); this.jobLauncher = listenerConstructorWrapper.getJobLauncher(); this.jobIncrementer = listenerConstructorWrapper.getJobIncrementer(); this.jobListenerConfiguration = this.jobConfiguration.getJobListenerConfiguration(); this.listenerStatus = listenerConstructorWrapper.getJobConfiguration().getJobListenerConfiguration().getListenerStatus(); this.assertConstructor(); try { this.attachJobIncrementer(); this.initFileListFilter(); this.initTransformer(); this.initJobLaunchingMessageHandler(); this.initIntegrationFlow(); } catch (final Exception e) { throw new SpringBatchLightminConfigurationException(e.getMessage()); } }
@Override public void stopJobConfiguration(final Long jobConfigurationId) { try { final JobConfiguration jobConfiguration = this.jobConfigurationRepository.getJobConfiguration(jobConfigurationId, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); final JobSchedulerConfiguration jobSchedulerConfiguration = jobConfiguration.getJobSchedulerConfiguration(); final JobListenerConfiguration jobListenerConfiguration = jobConfiguration.getJobListenerConfiguration(); if (jobSchedulerConfiguration != null) { final String beanName = jobSchedulerConfiguration.getBeanName(); this.schedulerService.terminate(beanName); jobConfiguration.getJobSchedulerConfiguration().setSchedulerStatus(SchedulerStatus.STOPPED); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } else if (jobListenerConfiguration != null) { final String beanName = jobListenerConfiguration.getBeanName(); this.listenerService.terminateListener(beanName); jobConfiguration.getJobListenerConfiguration().setListenerStatus(ListenerStatus.STOPPED); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } } catch (final NoSuchJobConfigurationException e) { throw new SpringBatchLightminApplicationException(e, e.getMessage()); } }
@Test public void addWithListenerIT() { final JobListenerConfiguration jobListenerConfiguration = DomainTestHelper.createJobListenerConfiguration ("src/test/", "*.txt", JobListenerType.LOCAL_FOLDER_LISTENER); jobListenerConfiguration.setBeanName("testBean"); final JobConfiguration jobConfiguration = DomainTestHelper.createJobConfiguration(jobListenerConfiguration); final JobConfiguration addedJobConfiguration = this.getJobConfigurationRepository().add(jobConfiguration, APPLICATION_NAME); assertThat(addedJobConfiguration).isNotNull(); assertThat(addedJobConfiguration.getJobConfigurationId()).isNotNull(); assertThat(addedJobConfiguration.getJobListenerConfiguration()).isNotNull(); final JobConfiguration secondAddedJobConfiguration = this.getJobConfigurationRepository().add(jobConfiguration, APPLICATION_NAME); assertThat(secondAddedJobConfiguration).isNotNull(); assertThat(secondAddedJobConfiguration.getJobConfigurationId()).isNotNull(); assertThat(secondAddedJobConfiguration.getJobListenerConfiguration()).isNotNull(); final Collection<JobConfiguration> allResult = this.getJobConfigurationRepository().getAllJobConfigurations(APPLICATION_NAME); assertThat(allResult).hasSize(2); }
private void initIntegrationFlow() { this.integrationFlow = IntegrationFlows .from(Files.inboundAdapter(new File(this.jobListenerConfiguration.getSourceFolder())) .filter(this.fileFileListFilter) .scanEachPoll(Boolean.TRUE) .get(), e -> { e.poller(Pollers.fixedRate(this.jobListenerConfiguration.getPollerPeriod()).maxMessagesPerPoll(1000)); e.autoStartup(Boolean.TRUE); }) .transform(this.transformer, e -> e.autoStartup(Boolean.TRUE)) .handle(this.jobLaunchingMessageHandler) .channel(MessageChannels.direct()) .handle(new JobExecutionFinishedMessageHandler()) .get(); }
jobConfiguration.getJobSchedulerConfiguration().setBeanName(TEMP_BEAN_NAME + "_SCHEDULER_" + jobConfiguration.getJobConfigurationId()); } else if (jobConfiguration.getJobListenerConfiguration() != null) { jobConfiguration.getJobListenerConfiguration().setBeanName(TEMP_BEAN_NAME + "_LISTENER_" + jobConfiguration .getJobConfigurationId()); addedJobConfiguration.getJobListenerConfiguration().setBeanName(beanName); if (ListenerStatus.ACTIVE.equals(addedJobConfiguration.getJobListenerConfiguration().getListenerStatus())) { this.listenerService.activateListener(beanName, Boolean.TRUE);
@Override public void updateJobConfiguration(final JobConfiguration jobConfiguration) { jobConfiguration.validateForUpdate(); try { final JobConfiguration existingJobConfiguration = this.jobConfigurationRepository.getJobConfiguration(jobConfiguration.getJobConfigurationId(), this.springBatchLightminCoreConfigurationProperties.getApplicationName()); if (existingJobConfiguration.getJobSchedulerConfiguration() != null) { final String existingBeanName = existingJobConfiguration.getJobSchedulerConfiguration().getBeanName(); jobConfiguration.getJobSchedulerConfiguration().setBeanName(existingBeanName); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); this.schedulerService.refreshSchedulerForJob(jobConfiguration); if (SchedulerStatus.RUNNING.equals(jobConfiguration.getJobSchedulerConfiguration().getSchedulerStatus())) { this.schedulerService.schedule(jobConfiguration.getJobSchedulerConfiguration().getBeanName(), Boolean.TRUE); } else { log.info("Scheduler not started, no scheduling triggered!"); } } else if (existingJobConfiguration.getJobListenerConfiguration() != null) { final String existingBeanName = existingJobConfiguration.getJobListenerConfiguration().getBeanName(); jobConfiguration.getJobListenerConfiguration().setBeanName(existingBeanName); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); this.listenerService.refreshListenerForJob(jobConfiguration); } } catch (final NoSuchJobConfigurationException e) { log.error(e.getMessage()); throw new SpringBatchLightminApplicationException(e, e.getMessage()); } }
private void initFileListFilter() throws Exception { this.fileFileListFilter = new CompositeFileListFilter<>(); this.fileFileListFilter.addFilter(new AcceptOnceFileListFilter<>()); this.fileFileListFilter.addFilter(new IgnoreHiddenFileListFilter()); this.fileFileListFilter.addFilter(new SimplePatternFileListFilter(this.jobListenerConfiguration.getFilePattern())); }
public FolderListener(final ListenerConstructorWrapper listenerConstructorWrapper) { this.jobConfiguration = listenerConstructorWrapper.getJobConfiguration(); this.job = listenerConstructorWrapper.getJob(); this.jobParameters = listenerConstructorWrapper.getJobParameters(); this.jobLauncher = listenerConstructorWrapper.getJobLauncher(); this.jobIncrementer = listenerConstructorWrapper.getJobIncrementer(); this.jobListenerConfiguration = this.jobConfiguration.getJobListenerConfiguration(); this.listenerStatus = listenerConstructorWrapper.getJobConfiguration().getJobListenerConfiguration().getListenerStatus(); this.assertConstructor(); try { this.attachJobIncrementer(); this.initFileListFilter(); this.initTransformer(); this.initJobLaunchingMessageHandler(); this.initIntegrationFlow(); } catch (final Exception e) { throw new SpringBatchLightminConfigurationException(e.getMessage()); } }
public static JobListenerConfiguration map(final Map<String, Object> values) { final JobListenerConfiguration jobListenerConfiguration = new JobListenerConfiguration(); jobListenerConfiguration.setBeanName(getValueOrNull(values, JobListenerConfigurationKey.BEAN_NAME, String.class)); jobListenerConfiguration.setFilePattern(getValueOrNull(values, JobListenerConfigurationKey.FILE_PATTERN, String.class)); jobListenerConfiguration.setPollerPeriod(getValueOrNull(values, JobListenerConfigurationKey.POLLER_PERIOD, Long.class)); jobListenerConfiguration.setSourceFolder(getValueOrNull(values, JobListenerConfigurationKey.SOURCE_FOLDER, String.class)); final ListenerStatus listenerStatus = ListenerStatus.getByValue(getValueOrNull(values, JobListenerConfigurationKey.STATUS, String.class)); jobListenerConfiguration.setListenerStatus(listenerStatus); final JobListenerType jobListenerType = JobListenerType.getById(getValueOrNull(values, JobListenerConfigurationKey.LISTENER_TYPE, Long.class)); jobListenerConfiguration.setJobListenerType(jobListenerType); final TaskExecutorType taskExecutorType = TaskExecutorType.getById(getValueOrNull(values, JobSchedulerConfigurationKey.TASK_EXECUTOR_TYPE, Long.class)); jobListenerConfiguration.setTaskExecutorType(taskExecutorType); return jobListenerConfiguration; }
private static JobListenerConfiguration map(final org.tuxdevelop.spring.batch.lightmin.domain.JobListenerConfiguration jobListenerConfiguration) { final JobListenerConfiguration response; if (jobListenerConfiguration != null) { response = new JobListenerConfiguration(); response.setListenerStatus(map(jobListenerConfiguration.getListenerStatus())); response.setTaskExecutorType(map(jobListenerConfiguration.getTaskExecutorType())); response.setFilePattern(jobListenerConfiguration.getFilePattern()); response.setSourceFolder(jobListenerConfiguration.getSourceFolder()); response.setJobListenerType(map(jobListenerConfiguration.getJobListenerType())); response.setPollerPeriod(jobListenerConfiguration.getPollerPeriod()); } else { response = null; } return response; }
@Override public void stopJobConfiguration(final Long jobConfigurationId) { try { final JobConfiguration jobConfiguration = this.jobConfigurationRepository.getJobConfiguration(jobConfigurationId, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); final JobSchedulerConfiguration jobSchedulerConfiguration = jobConfiguration.getJobSchedulerConfiguration(); final JobListenerConfiguration jobListenerConfiguration = jobConfiguration.getJobListenerConfiguration(); if (jobSchedulerConfiguration != null) { final String beanName = jobSchedulerConfiguration.getBeanName(); this.schedulerService.terminate(beanName); jobConfiguration.getJobSchedulerConfiguration().setSchedulerStatus(SchedulerStatus.STOPPED); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } else if (jobListenerConfiguration != null) { final String beanName = jobListenerConfiguration.getBeanName(); this.listenerService.terminateListener(beanName); jobConfiguration.getJobListenerConfiguration().setListenerStatus(ListenerStatus.STOPPED); this.jobConfigurationRepository.update(jobConfiguration, this.springBatchLightminCoreConfigurationProperties.getApplicationName()); } } catch (final NoSuchJobConfigurationException e) { throw new SpringBatchLightminApplicationException(e, e.getMessage()); } }
@Test public void addWithListenerIT() { final JobListenerConfiguration jobListenerConfiguration = DomainTestHelper.createJobListenerConfiguration ("src/test/", "*.txt", JobListenerType.LOCAL_FOLDER_LISTENER); jobListenerConfiguration.setBeanName("testBean"); final JobConfiguration jobConfiguration = DomainTestHelper.createJobConfiguration(jobListenerConfiguration); final JobConfiguration addedJobConfiguration = this.getJobConfigurationRepository().add(jobConfiguration, APPLICATION_NAME); assertThat(addedJobConfiguration).isNotNull(); assertThat(addedJobConfiguration.getJobConfigurationId()).isNotNull(); assertThat(addedJobConfiguration.getJobListenerConfiguration()).isNotNull(); final JobConfiguration secondAddedJobConfiguration = this.getJobConfigurationRepository().add(jobConfiguration, APPLICATION_NAME); assertThat(secondAddedJobConfiguration).isNotNull(); assertThat(secondAddedJobConfiguration.getJobConfigurationId()).isNotNull(); assertThat(secondAddedJobConfiguration.getJobListenerConfiguration()).isNotNull(); final Collection<JobConfiguration> allResult = this.getJobConfigurationRepository().getAllJobConfigurations(APPLICATION_NAME); assertThat(allResult).hasSize(2); }