Mysql
 sql >> Database >  >> RDS >> Mysql

Per utilizzare il BatchConfigurer predefinito, il contesto non deve contenere più di un DataSource, trovato 2

Come suggerito da M. Deinum, metterei anche la configurazione delle origini dati in un file separato.

Oltre a ciò, ci sono i seguenti problemi nel tuo file di configurazione:

  1. SpringBatch cerca un'origine dati denominata "dataSource" (notare la S maiuscola). Se non ne trova uno, cerca qualsiasi origine dati trova. Tuttavia, se ne trova più di uno, genera un'eccezione -> quella che hai osservato.

  2. Nel file di configurazione, crei due origini dati e ne inserisci una (@Autowired Datasource dataSourceSecond). Ciò causerebbe il problema successivo, poiché non si dispone di un'origine dati con questo nome. (Hai definito solo le origini dati "secondaryDataSource" e "primaryDataSource"). Ciò comporterebbe anche un'eccezione.

Ecco come organizzerei le mie configurazioni

@Configuration
public DatasourceConfiguration {

    @Bean
    @ConfigurationProperties(prefix="spring.seconddatasource")
    public javax.sql.DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    // note the new name: dataSource -> this is the name springBatch is looking for
    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public javax.sql.DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}


@Configuration
@EnableBatchProcessing
@Import(DatasourceConfiguration.class)
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    // note the name
    @Autowired
    public DataSource secondaryDataSource;


    @Bean
    public JdbcCursorItemReader<User> reader()
    {
        JdbcCursorItemReader<User> reader=new JdbcCursorItemReader<>();

        // note the name
        reader.setDataSource(secondaryDataSource);
        reader.setSql("Select ACCT_ID from ACCT_table FETCH FIRST 100 ROWS ONLY");
        reader.setRowMapper(new UserRowerMapper());
        return reader;
    }

   ...

Ho anche scritto una risposta più approfondita a una domanda simile:Vorrei creare un progetto batch di primavera in cui batch non utilizza la mia origine dati