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>