Mysql
 sql >> база данни >  >> RDS >> Mysql

За да използвате BatchConfigurer по подразбиране, контекстът трябва да съдържа не повече от един източник на данни, намерен 2

Както предложи М. Дейнум, бих поставил и конфигурацията на източниците на данни в отделен файл.

Освен това във вашия конфигурационен файл има следните проблеми:

  1. SpringBatch търси източник на данни, наречен "dataSource" (обърнете внимание на главното S). Ако не намери такъв, търси всеки източник на данни, който намери. Ако обаче намери повече от едно, хвърля изключение -> това, което сте наблюдавали.

  2. Във вашия конфигурационен файл създавате два източника на данни и инжектирате един (@Autowired Datasource dataSourceSecond). Това би причинило следващия проблем, тъй като нямате източник на данни с това име. (Вие сте дефинирали само източниците на данни „secondaryDataSource“ и „primaryDataSource“). Това също би довело до изключение.

Ето как бих организирал конфигурациите си

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

   ...

Написах и по-подробен отговор на подобен въпрос:Бих искал да създам пролетен пакетен проект, където пакетът не използва моя източник на данни




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете топ N запис от всяка група MySql

  2. Как работи memcache с MySQL?

  3. Как да намеря следващия запис след определен в SQL?

  4. Как да актуализирате от изберете с Join

  5. Грешка:Времето за изчакване на неактивност при ръкостискане в Node.js v6.9.1 и MySQL