Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Untuk menggunakan BatchConfigurer default, konteksnya tidak boleh berisi lebih dari satu Sumber Data, ditemukan

Seperti yang disarankan M. Deinum, saya juga akan meletakkan konfigurasi sumber data di file terpisah.

Selain itu, ada masalah berikut di file konfigurasi Anda:

  1. SpringBatch mencari sumber data bernama "dataSource" (perhatikan huruf kapital S). Jika tidak menemukannya, ia akan mencari sumber data apa pun yang ditemukannya. Namun, jika menemukan lebih dari satu, ia mengeluarkan pengecualian -> yang Anda amati.

  2. Dalam file konfigurasi Anda, Anda membuat dua sumber data dan menyuntikkan satu (@Sumber Data Autowired dataSourceSecond). Ini akan menyebabkan masalah berikutnya, karena Anda tidak memiliki sumber data dengan nama ini. (Anda hanya mendefinisikan sumber data "secondaryDataSource" dan "primaryDataSource"). Ini juga akan menyebabkan pengecualian.

Inilah cara saya mengatur konfigurasi saya

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

   ...

Saya juga telah menulis jawaban yang lebih teliti untuk pertanyaan serupa:Saya ingin membuat proyek batch musim semi yang tidak menggunakan sumber data saya




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan ukuran kolom di tabel mysql

  2. Bagaimana cara memilih hanya tanggal dari bidang DATETIME di MySQL?

  3. Cara menyalin database SQLite dari Android ke database MySQL (replika/sinkronisasi)

  4. Menyimpan tanggal di mana hanya tahun yang dapat diketahui

  5. Bisakah Hibernate bekerja dengan sintaks ON DUPLICATE KEY UPDATE MySQL?