sql >> Database >  >> RDS >> Mysql

Om de standaard BatchConfigurer te gebruiken, mag de context niet meer dan één DataSource bevatten, gevonden

Zoals M. Deinum suggereerde, zou ik ook de configuratie van de gegevensbronnen in een apart bestand zetten.

Daarnaast zijn er de volgende problemen in uw configuratiebestand:

  1. SpringBatch zoekt naar een gegevensbron met de naam "dataSource" (let op de hoofdletter S). Als het er geen vindt, zoekt het naar elke gegevensbron die het vindt. Als het er echter meer dan één vindt, genereert het een uitzondering -> degene die je hebt waargenomen.

  2. In uw configuratiebestand maakt u twee gegevensbronnen en injecteert u er één (@Autowired Datasource dataSourceSecond). Dit zou het volgende probleem veroorzaken, aangezien u geen gegevensbron met deze naam hebt. (U hebt alleen de gegevensbronnen "secondaryDataSource" en "primaryDataSource" gedefinieerd). Dit zou ook leiden tot een uitzondering.

Hier is hoe ik mijn configuraties zou organiseren

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

   ...

Ik heb ook een uitgebreider antwoord geschreven op een vergelijkbare vraag:Ik wil een spring batch-project maken waarbij batch mijn gegevensbron niet gebruikt




  1. Gebruik binaire COPY-tabel FROM met psycopg2

  2. MySQL-kenmerkdatabase

  3. Mogelijke gevolgen van het vergroten van de varchar-lengte in MySql?

  4. SQL-referentietabel:basisquery's maken en schrijven