Olá pessoal!
Seguindo o curso de Spring Batch ao executar o job notei que as tabelas que devem ser criadas pelo Spring batch automaticamente não foram criadas no meu banco, porém a conexão com o banco está correta uma vez que ao rodar o programa ele executa sem erros, a tabela importacao foi criada tendo salvo as informações contida no arquivo dados.csv na tabela . Não estou conseguindo identificar o quê esta faltando para que o Spring Batch possa criar as tabelas e gerenciar os logs no postgres já que por default ele vem configurado para fazer esse gerenciamento em bancos em mémorias como o H2 por exemplo.
Como meu projeto foi criado, note que estou utilizando a versão 4.1.1 ou invés da 3.2.2 sugerida no curso já que ela esta defasada:
Meu application.yaml, ele esta com algumas configurações a mais devido as tentativas de solucionar o problema:
spring:
application:
name: codetickets
datasource:
url: jdbc:postgresql://localhost:5432/codetickets
jdbc-url: jdbc:postgresql://localhost:5432/codetickets
username: "${POSTGRES_USERNAME}"
password: "${POSTGRES_PASSWORD}"
driver-class-name: org.postgresql.Driver
batch:
jdbc:
initialize-schema: always
jpa:
hibernate:
ddl-auto: update
logging:
level:
org.springframework.batch: DEBUG
org.springframework.jdbc.core: DEBUG
Meu ImportacaoJobConfiguration:
@Configuration
public class ImportacaoJobConfiguration {
private final PlatformTransactionManager transactionManager;
public ImportacaoJobConfiguration(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
@Bean
public Job job(Step passoInicial, JobRepository jobRepository) {
return new JobBuilder("geracaoTickets", jobRepository)
.start(passoInicial)
.incrementer(new RunIdIncrementer())
.build();
}
@Bean
public Step passoInicial(ItemReader<Importacao> reader, ItemWriter<Importacao> writer,
JobRepository jobRepository) {
return new StepBuilder("passoInicial", jobRepository)
.<Importacao, Importacao>chunk(200)
.transactionManager(transactionManager)
.reader(reader)
.writer(writer)
.build();
}
@Bean
public ItemReader<Importacao> reader() {
return new FlatFileItemReaderBuilder<Importacao>()
.name("leituraCsv")
.resource(new FileSystemResource("files/dados.csv"))
.comments("--")
.delimited()
.delimiter(";")
.names(
"cpf",
"cliente",
"nascimento",
"evento",
"data",
"tipoIngresso",
"valor")
.fieldSetMapper(new ImportacaoMapper())
.build();
}
@Bean
public ItemWriter<Importacao> writer(DataSource dataSource) {
return new JdbcBatchItemWriterBuilder<Importacao>()
.dataSource(dataSource)
.sql("""
INSERT INTO importacao (
cpf, cliente, nascimento, evento, data, tipo_ingresso, valor, hora_importacao)
VALUES (
:cpf, :cliente, :nascimento, :evento, :data, :tipoIngresso, :valor, LOCALTIMESTAMP(0))
""")
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
.build();
}
}
Como alternativa até criei as tabelas manualmente usando o script, mas ao executar a aplicação nenhum registro foi salvo nelas.