processes jobbuilderfactory job example enablebatchprocessing batch baeldung java spring spring-boot spring-batch

java - jobbuilderfactory - Spring boot spring.batch.job.enabled=false no puede reconocer



spring batch processes (1)

Pude saber qué está pasando, estoy usando un lector / procesador / escritor personalizado. Cuando se inicia la aplicación Springboot, en realidad intento hacer una inyección de dependencia de estos beans de beans personalizados donde he escrito alguna lógica de aplicación.

Ejemplo

** TestConfiguration.class **

@Configuration @EnableBatchProcessing public class TestConfiguration { @Bean @Conditional(Employee.class) public ItemWriter<Employee> writer_employee(DataSource dataSource) throws IOException { FlatFileItemWriter<Employee> writer = new FlatFileItemWriter<Employee>(); writer.setResource(new FileSystemResource(FinanceReportUtil.createFile("Employee.csv"))); writer.setHeaderCallback(new FlatFileHeaderCallback() { @Override public void writeHeader(Writer writer) throws IOException { writer.write("id, name"); } }); DelimitedLineAggregator<Employee> delLineAgg = new DelimitedLineAggregator<Employee>(); delLineAgg.setDelimiter(","); BeanWrapperFieldExtractor<Employee> fieldExtractor = new BeanWrapperFieldExtractor<Employee>(); fieldExtractor.setNames(new String[]{"id", "name"}); delLineAgg.setFieldExtractor(fieldExtractor); writer.setLineAggregator(delLineAgg); return writer; } @Bean @Conditional(Manager.class) public ItemWriter<Person> writer_manager(DataSource dataSource) throws IOException { // Does the same logic as employee } // Also has job and step etc. }

Creará el archivo incluso con spring.batch.job.enabled = false, para superar esto he creado una lógica personalizada para inyectar los beans o no como se muestra a continuación

application.properties

# all, manager, employee person=manager

ManagerCondition.class

public class ManagerCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { String person= context.getEnvironment().getProperty("person"); return person.equals("manager"); }

Intenté spring.batch.job.enabled=false en application.properties y -Dspring.batch.job.enabled=false cuando -Dspring.batch.job.enabled=false el archivo jar.

Sin embargo, @EnableBatchProcessing comienza automáticamente a ejecutar los trabajos por lotes al inicio de la aplicación. ¿Cómo puedo depurar ese escenario?

TestConfiguration.class

@Configuration @EnableBatchProcessing public class TestConfiguration {...}

Aplicación principal

@ComponentScan("com.demo") @EnableAutoConfiguration public class MainApplication { public static void main(String[] args) throws BeansException, JobExecutionAlreadyRunningException, JobInstanceAlreadyCompleteException, JobParametersInvalidException, InterruptedException, JobRestartException { ConfigurableApplicationContext ctx = SpringApplication.run(TestConfiguration.class, args); ...}

pom.xml Estoy usando la dependencia como arranque de primavera y no como padre

<dependencyManagement> <dependencies> <!-- Import dependecy for spring boot from here--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>