Olá amigos.
Procuro uma solução para um problema com SpringBatch. É meu primeiro projeto com ele e estou diante do seguinte cenário em que tenho um arquivo .csv que precisa ser lido tratado e o resultado ser persistido em três tabelas diferentes no banco. No caso, no SQL Server. Procurei na internet mas não achei nada, nenhuma exemplo se quer. Parece que só da pra ler de um arquivo e enviar para uma tabela. É isso mesmo?
Sabem me dizer se isso é possível e se for, enviar algum exemplo?
Agradeço a todos
É possível sim, isso é você quem controla e não o framework!
Acredito que você vai precisar de um job com 3 steps, um reader, um processor e um writer, no reader você lê o arquivo, no processor você manipula e formata os dados da forma que precisar e no writer você escreve no banco de dados nas tabelas em que você quiser.
O que me parece é que você está buscando na internet a solução completa para o seu problema e isso você realmente não vai encontrar mesmo, você vai encontrar exemplos distintos onde você vai precisar entender e adaptar para sua necessidade.
Entenda como o Spring Batch funciona e cria sua implementação própria que atenda a sua necessidade.
Olá Jonathan, na verdade eu persisto em uma tabela mas não consigo achar nada que mede uma noção de como usar o writer para escrever em multiplas tabelas. O que eu busco é só um pequeno exemplo e não um solução completa. Como eu disse, esse meu primeiro contato com o SpringBatch , meu tempo é curto e a documentação extensa por isso busco apenas um exemplo de como usar o writer para escrever em varias tabelas.
Se tiver algo, agradeço.
Mas jovem, perceba: Se você já escreve em uma, o que te impede de escrever nas demais?
Se estiver usando Spring Data JPA, basta chamar os seus repositories e mandar persistir as entidades que quiser!
Se estiver usando JDBC e fazendo na mão, é o mesmo processo!
Como está a implementação do seu Writer?
Como você está fazendo a persistência dentro do contexto dele?
Eu não postei o código, porque estou usando exatamente o modelo inicial do spring.io Getting Started | Creating a Batch Service (Getting Started | Creating a Batch Service
e lá como está não tem nenhum exemplo e todos os exemplos da web são baseados nele.
Saquei, usando a estratégia de chunks, que basicamente são processamento em lotes, tu poderia fazer algo mais ou menos assim:
@Component
public class MyCustomItemWriter implements ItemWriter<MinhaClasseQueOProcessorDevolve> {
private final RepositoryUm repositoryUm;
private final RepositoryDois reporitoryDois;
public MyCustomItemWriter(final RepositoryUm reprositoryUm, final RepositoryDois reporsitoryDois) {
this.repositoryUm = reporitoryUm;
this.repositoryDois = reporitoryDois;
}
@Override
public void write(final List<? extends MinhaClasseQueOProcessorDevolve> items) {
// Recebe o lote de items do tipo MinhaClasseQueOProcessorDevolve
// Cria suas entidades conforme necessário
// Chama os reporitórios e salve no banco
repositoryUm.save(minhaEntidadeBla);
repositoryDois.save(minhaEntidadeFoo);
}
}
Maravilha!!!. Era isso!!!
Abriu o leque pra eu saber o que fazer.
Valeu!!!