Не могу сконфигурировать spring batch приложение, что бы запустить его в spring data flow. Бьюсь уже два дня и все как то очень сложно.
Задача прочитать csv и записать в одну табличку. reader и writer сконфигурировал, тут все просто и вроде ложно работать. Но вся петрушка, в spring batch и spring cloud task. Им очень необходима своя база данных, что бы туда записать свои контрольные данные TASK и JOB таблички. И все это очень усложняет конфигурирование приложения. Что бы тестировать локально, я создал такой конфиг
@Slf4j
@Configuration
@Profile("!cloud")
public class LocalConfiguration {
@Bean
public BatchConfigurer batchConfigurer(DataSource dataSource) {
log.info("create local BatchConfigurer");
return new DefaultBatchConfigurer(dataSource) {
@Override
public void setDataSource(DataSource dataSource) {
log.info("called setDataSource");
}
};
}
@Bean
public TaskConfigurer taskConfigurerLocal() {
return new DefaultTaskConfigurer((DataSource) null);
}
}
writer выглядит так
@Bean
public ItemWriter<ZgsEntity> writerProduction() {
log.info("create writer");
return new RepositoryItemWriter<ZgsEntity>() {{
setRepository(zgsRepository);
}};
}
Запускаю приложение, вроде csv файл обрабатывается, hibernate ставит Entity в очередь на запись, но самой записи не происходит. В логе вижу такое
2021-08-19 15:38:42.808 [main] TRACE o.h.engine.spi.IdentifierValue - ID unsaved-value strategy UNDEFINED
2021-08-19 15:38:42.808 [main] TRACE o.h.event.internal.EntityState - Transient instance of: com.daimler.zgs.entities.ZgsEntity
2021-08-19 15:38:42.808 [main] TRACE o.h.e.i.DefaultPersistEventListener - Saving transient instance
2021-08-19 15:38:42.808 [main] DEBUG o.h.e.i.AbstractSaveEventListener - Generated identifier: component[вырезал}, using strategy: org.hibernate.id.CompositeNestedGeneratedValueGenerator
2021-08-19 15:38:42.808 [main] TRACE o.h.e.i.AbstractSaveEventListener - Saving [com.daimler.zgs.entities.ZgsEntity#component[вырезал]{вырезал}]
2021-08-19 15:38:42.808 [main] TRACE org.hibernate.engine.spi.ActionQueue - Adding an EntityInsertAction for [com.daimler.zgs.entities.ZgsEntity] object
2021-08-19 15:38:42.808 [main] TRACE org.hibernate.engine.spi.ActionQueue - Adding insert with no non-nullable, transient entities: [EntityInsertAction[com.daimler.zgs.entities.ZgsEntity#com.daimler.zgs.entities.ZgsEntityId@3333245e]]
2021-08-19 15:38:42.808 [main] TRACE org.hibernate.engine.spi.ActionQueue - Adding resolved non-early insert action.
2021-08-19 15:38:42.810 [main] TRACE org.hibernate.internal.SessionImpl - Closing session [0eb1b3ba-2fb0-4187-a618-0eb24fb56e8b]
2021-08-19 15:38:42.810 [main] TRACE o.h.e.j.internal.JdbcCoordinatorImpl - Closing JDBC container [org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl@7ec68821]
2021-08-19 15:38:42.810 [main] TRACE o.h.r.j.i.ResourceRegistryStandardImpl - Releasing JDBC resources
2021-08-19 15:38:42.810 [main] TRACE o.h.r.j.i.LogicalConnectionManagedImpl - Closing logical connection
2021-08-19 15:38:42.810 [main] TRACE o.h.r.j.i.LogicalConnectionManagedImpl - Logical connection closed
2021-08-19 15:38:42.811 [main] INFO o.s.batch.core.step.AbstractStep - Step: [step1] executed in 48ms
Смотрю в базе данных приложения, там пусто. Ну и по логам видно, что ничего и не пишет. Куда все девается, неясно. Поставил на zgsRepository @Transactional, толку никакого.
Мне кажется все пишется в базу, которая создается под spring batch и spring cloud, хотя для своего DataSource я указал @Primary.
Туториалы spring cloud и spring batch только намеками говорят, что надо сделать. И все такое сложное получается. Я уже запутался. Может есть какой то простой туториал, где разжовываются обе эти темы?
Спасибо