sql >> Databáze >  >> RDS >> Mysql

Chcete-li použít výchozí BatchConfigurer, kontext nesmí obsahovat více než jeden zdroj dat, nalezený 2

Jak navrhl M. Deinum, dal bych také konfiguraci datových zdrojů do samostatného souboru.

Kromě toho jsou v konfiguračním souboru následující problémy:

  1. SpringBatch hledá zdroj dat s názvem „dataSource“ (všimněte si velkého S). Pokud žádný nenajde, hledá jakýkoli zdroj dat, který najde. Pokud však najde více než jednu, vyvolá výjimku -> tu, kterou jste pozorovali.

  2. V konfiguračním souboru vytvoříte dva zdroje dat a jeden vložíte (@Autowired Datasource dataSourceSecond). To by způsobilo další problém, protože nemáte zdroj dat s tímto názvem. (Definovali jste pouze zdroje dat "secondaryDataSource" a "primaryDataSource"). To by také vedlo k výjimce.

Zde je návod, jak bych uspořádal své konfigurace

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

   ...

Napsal jsem také důkladnější odpověď na podobnou otázku:Chtěl bych vytvořit jarní dávkový projekt, kde batch nepoužívá můj zdroj dat




  1. Jak:porovnat (vyhledat mezeru) proti (připojit se ke sloupci z jiné tabulky)

  2. PreparedStatement nikdy nevyprší časový limit, i když je explicitně nastaven

  3. Přidejte spoustu dat s určitým časovým intervalem v Javě

  4. MySQL sakra... nelze se připojit k databázi /tmp/mysql.sock