Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Aby użyć domyślnego programu BatchConfigurer, kontekst musi zawierać nie więcej niż jedno źródło danych, znalezione 2

Jak zasugerował M. Deinum, umieściłbym również konfigurację źródeł danych w osobnym pliku.

Poza tym w Twoim pliku konfiguracyjnym występują następujące problemy:

  1. SpringBatch szuka źródła danych o nazwie „dataSource” (zwróć uwagę na duże S). Jeśli go nie znajdzie, szuka dowolnego znalezionego źródła danych. Jeśli jednak znajdzie więcej niż jeden, zgłasza wyjątek -> ten, który zaobserwowałeś.

  2. W pliku konfiguracyjnym tworzysz dwa źródła danych i wstrzykujesz jedno (@Autowired Datasource dataSourceSecond). Spowodowałoby to kolejny problem, ponieważ nie masz źródła danych o tej nazwie. (Zdefiniowałeś tylko źródła danych „secondaryDataSource” i „primaryDataSource”). Prowadziłoby to również do wyjątku.

Oto jak uporządkowałbym moje konfiguracje

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

   ...

Napisałem też dokładniejszą odpowiedź na podobne pytanie:Chciałbym utworzyć wiosenny projekt wsadowy, w którym partia nie korzysta z mojego źródła danych




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL wybiera top X rekordów dla każdej osoby w tabeli

  2. Zend_Db_Wybierz kolejność losowo, kompatybilna w mssql / mysql

  3. Tworzysz hierarchiczny JSON z wyników MySQL i PHP dla drzewa D3.js?

  4. INSERT INTO kończy się niepowodzeniem z node-mysql

  5. Oblicz głębokość w modelu rodzic-dziecko w MySQL