sql >> Databasteknik >  >> RDS >> Mysql

För att använda standard BatchConfigurer får sammanhanget inte innehålla mer än en datakälla, hittad 2

Som M. Deinum föreslog, skulle jag också lägga konfigurationen av datakällorna i en separat fil.

Utöver det finns det följande problem i din konfigurationsfil:

  1. SpringBatch letar efter en datakälla som heter "dataSource" (notera det stora S). Om den inte hittar någon söker den efter vilken datakälla den hittar. Men om den hittar mer än en, ger den ett undantag -> det du observerade.

  2. I din konfigurationsfil skapar du två datakällor och injicerar en (@Autowired Datasource dataSourceSecond). Detta skulle orsaka nästa problem, eftersom du inte har en datakälla med detta namn. (Du definierade bara datakällorna "secondaryDataSource" och "primaryDataSource"). Detta skulle också leda till ett undantag.

Så här skulle jag organisera mina konfigurationer

@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;
    }

   ...

Jag har också skrivit ett mer ingående svar på en liknande fråga:Jag skulle vilja skapa ett vårbatch-projekt där batch inte använder min datakälla




  1. Laravel Query Builder WHERE NOT IN

  2. Hur väljer jag slumpmässiga rader i MySQL?

  3. PHP - Skapa en kapslad array från MySQL-data

  4. En affärsdatamodell för prenumeration