title: Using multiple datasources in springbatch (spring-boot-1.5.2.RELEASE) throwing exception on bootup
body: <p>I am trying to use two datasources, one for metadata tables from spring batch and other is my application database to read/process/write. when I am trying to use both it is giving the following exception.</p>
  
  <pre><code>    java.lang.IllegalStateException: To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2
      at org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.getConfigurer(AbstractBatchConfiguration.java:108) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
      at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration.initialize(SimpleBatchConfiguration.java:114) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
      at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$ReferenceTargetSource.createObject(SimpleBatchConfiguration.java:142) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
      at org.springframework.aop.target.AbstractLazyCreationTargetSource.getTarget(AbstractLazyCreationTargetSource.java:86) ~[spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:192) ~[spring-aop-4.3.7.RELEASE.jar:4.3.7.RELEASE]
      at com.sun.proxy.$Proxy43.getJobInstances(Unknown Source)
  
  
  ----------
  
      import java.sql.SQLException;
  
  import javax.sql.DataSource;
  
  import org.springframework.batch.core.Job;
  import org.springframework.batch.core.Step;
  import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
  import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
  import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
  import org.springframework.batch.core.launch.support.RunIdIncrementer;
  import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
  import org.springframework.batch.item.database.JdbcBatchItemWriter;
  import org.springframework.batch.item.file.FlatFileItemReader;
  import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
  import org.springframework.batch.item.file.mapping.DefaultLineMapper;
  import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.Primary;
  import org.springframework.core.io.ClassPathResource;
  import org.springframework.jdbc.core.JdbcTemplate;
  import org.springframework.jdbc.datasource.SimpleDriverDataSource;
  
  import com.springbatch_sample.domain.Person;
  
  @Configuration
  @EnableBatchProcessing
  public class BatchConfiguration {
  
      @Autowired
      public JobBuilderFactory jobBuilderFactory;
  
      @Autowired
      public StepBuilderFactory stepBuilderFactory;
  
  
  
      @Bean
      @Primary
      public DataSource hsqldbDataSource() throws SQLException {
          final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
          dataSource.setDriver(new org.hsqldb.jdbcDriver());
          dataSource.setUrl("jdbc:hsqldb:hsql://localhost:9001/xdb");
          dataSource.setUsername("sa");
          dataSource.setPassword("sa");
          return dataSource;
      }
  
      @Bean
      public JdbcTemplate jdbcTemplate(final DataSource dataSource) {
          return new JdbcTemplate(dataSource);
      }
  
      @Bean
      @Qualifier("mysqlDataSource")
      public DataSource mysqlDataSource() throws SQLException {
          final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
          dataSource.setDriver(new com.ibm.db2.jcc.DB2Driver());
          dataSource.setUrl("jdbc:db2://xxxx");
          dataSource.setUsername("user");
          dataSource.setPassword("pswd");
          //DatabasePopulatorUtils.execute(databasePopulator(), dataSource);
          return dataSource;
      }
  
      @Bean
      public FlatFileItemReader&lt;Person&gt; reader() {
          FlatFileItemReader&lt;Person&gt; reader = new FlatFileItemReader&lt;Person&gt;();
          reader.setResource(new ClassPathResource("sample-data.csv"));
          reader.setLineMapper(new DefaultLineMapper&lt;Person&gt;() {{
              setLineTokenizer(new DelimitedLineTokenizer() {{
                  setNames(new String[] { "firstName", "lastName" });
              }});
              setFieldSetMapper(new BeanWrapperFieldSetMapper&lt;Person&gt;() {{
                  setTargetType(Person.class);
              }});
          }});
          return reader;
      }
  
      @Bean
      public PersonItemProcessor processor() {
          return new PersonItemProcessor();
      }
  
      @Bean
      public JdbcBatchItemWriter&lt;Person&gt; writer() throws SQLException {
          JdbcBatchItemWriter&lt;Person&gt; writer = new JdbcBatchItemWriter&lt;Person&gt;();
          writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider&lt;Person&gt;());
          writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
          writer.setDataSource(hsqldbDataSource());
          return writer;
      }
      // end::readerwriterprocessor[]
  
      // tag::jobstep[]
      @Bean
      public Job importUserJob(JobCompletionNotificationListener listener) throws SQLException {
          return jobBuilderFactory.get("importUserJob")
                  .incrementer(new RunIdIncrementer())
                  .listener(listener)
                  .flow(step1())
                  .end()
                  .build();
      }
  
      @Bean
      public Step step1() throws SQLException {
          return stepBuilderFactory.get("step1")
                  .&lt;Person, Person&gt; chunk(10)
                  .reader(reader())
                  .processor(processor())
                  .writer(writer())
                  .build();
      }
      // end::jobstep[]
  }
  </code></pre>