sql >> Database teknologi >  >> RDS >> Mysql

For at bruge standard BatchConfigurer må konteksten ikke indeholde mere end én DataSource, fundet 2

Som M. Deinum foreslog, ville jeg også lægge konfigurationen af ​​datakilderne i en separat fil.

Udover det er der følgende problemer i din konfigurationsfil:

  1. SpringBatch leder efter en datakilde med navnet "dataSource" (bemærk det store S). Hvis den ikke finder en, søger den efter enhver datakilde, den finder. Men hvis den finder mere end én, kaster den en undtagelse -> den du observerede.

  2. I din konfigurationsfil opretter du to datakilder og injicerer én (@Autowired Datasource dataSourceSecond). Dette ville forårsage det næste problem, da du ikke har en datakilde med dette navn. (Du har kun defineret datakilderne "secondaryDataSource" og "primaryDataSource"). Dette ville også føre til en undtagelse.

Her er, hvordan jeg ville organisere mine konfigurationer

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

   ...

Jeg har også skrevet et mere grundigt svar på et lignende spørgsmål:Jeg vil gerne oprette et forårsbatch-projekt, hvor batch ikke bruger min datakilde




  1. Sådan opretter du linket server MySQL

  2. MySQL-forespørgsel til fælles venner

  3. Udførelse af rekursive lagrede procedurer i MYSQL for at få hierarkiske data

  4. Google-diagramtidslinje med dato i x-aksen