klee-contrib / topmodel

Outil de modélisation et générateurs pour divers langages
https://klee-contrib.github.io/topmodel/#/
MIT License
9 stars 9 forks source link

[JPA] Générateur de workflow spring #281

Closed gideruette closed 1 year ago

gideruette commented 1 year ago

Donner la possibilité de générer ce type de code avec Spring-batch

    @Bean
    public FlatFileItemReader<Hero> csvReader() {
        return new FlatFileItemReaderBuilder<Hero>()
                .name("personItemReader")
                .resource(new ClassPathResource("sample-data.csv"))
                .delimited()
                .names(new String[] { "id", "name" })
                .fieldSetMapper(new BeanWrapperFieldSetMapper<Hero>() {
                    {
                        setTargetType(Hero.class);
                    }
                })
                .build();
    }

    @Bean
    public Job importUserJob(JobRepository jobRepository, Step step1) {
        return new JobBuilder("importUserJob", jobRepository)
                .incrementer(new RunIdIncrementer())
                .flow(step1)
                .end()
                .build();
    }

    @Bean
    public Step step1(JobRepository jobRepository,
            PlatformTransactionManager transactionManager, HeroBulkItemWriter writer) {
        return new StepBuilder("step1", jobRepository)
                .<Hero, Hero>chunk(100000, transactionManager)
                .reader(csvReader())
                .processor(processor())
                .writer(writer)
                .build();
    }

    @Bean
    public HeroBulkItemWriter heroBulkItemWriter(HikariDataSource dataSource) {
        return new HeroBulkItemWriter(dataSource);
    }

    public class HeroMapping extends AbstractMapping<Hero> {
        public HeroMapping() {
            super("toh", "hero");
            mapLong("her_id", Hero::getId);
            mapText("her_name", Hero::getName);
        }
    }

    public class HeroBulkItemWriter implements ItemWriter<Hero> {

        DataSource dataSource;

        public HeroBulkItemWriter(DataSource dataSource) {
            this.dataSource = dataSource;
        }

        public void write(Chunk<? extends Hero> items) throws Exception {
            var bulkInsert = new PgBulkInsert<>(new HeroMapping());
            try (var connection = dataSource.getConnection()) {
                List<Hero> heroes = (List<Hero>) items.getItems();
                // Now save all entities of a given stream:
                PGConnection pgConnection = PostgreSqlUtils.getPGConnection(connection);
                bulkInsert.saveAll(pgConnection, heroes.stream());
            }
        }
    }