Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Để sử dụng BatchConfigurer mặc định, ngữ cảnh không được chứa nhiều DataSource khác, tìm thấy 2

Như M. Deinum đã đề xuất, tôi cũng sẽ đặt cấu hình của các nguồn dữ liệu trong một tệp riêng biệt.

Bên cạnh đó, có những vấn đề sau trong tệp cấu hình của bạn:

  1. SpringBatch tìm kiếm một nguồn dữ liệu có tên là "dataSource" (lưu ý chữ S viết hoa). Nếu không tìm thấy, nó sẽ tìm bất kỳ nguồn dữ liệu nào mà nó tìm thấy. Tuy nhiên, nếu nó tìm thấy nhiều hơn một, nó sẽ ném ra một ngoại lệ -> ngoại lệ mà bạn đã quan sát.

  2. Trong tệp cấu hình của mình, bạn tạo hai nguồn dữ liệu và đưa một nguồn vào (@Autowosystem Datasource dataSourceSecond). Điều này sẽ gây ra sự cố tiếp theo, vì bạn không có nguồn dữ liệu với tên này. (Bạn chỉ xác định các nguồn dữ liệu "SecondaryDataSource" và "primaryDataSource"). Điều này cũng sẽ dẫn đến một ngoại lệ.

Đây là cách tôi sắp xếp các cấu hình của mình

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

   ...

Tôi cũng đã viết một câu trả lời cặn kẽ hơn cho một câu hỏi tương tự: Tôi muốn tạo một dự án hàng loạt mùa xuân trong đó batch không sử dụng nguồn dữ liệu của tôi




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cập nhật múi giờ cho các dấu thời gian (create_at và updated_at) do Laravel Eloquent quản lý?

  2. Tìm giá trị ÍT NHẤT / LỚN NHẤT từ các CỘT được kết hợp, bỏ qua 0 &NULL- MYSQL

  3. MySQL - Xóa một số bảng cụ thể khỏi cơ sở dữ liệu lớn

  4. Chèn một danh sách đơn giản vào bảng MySQL (php)

  5. Khi sử dụng SELECT, bạn có thể sửa đổi giá trị của một trường được trả về dựa trên các trường khác không?