'exception is java.lang.IllegalArgumentException: "DataSource must be provided"

while creating a spring batch job that reads data from one table using a reader class and then writes into another table in the same db. while running the application getting "datasource must be provided" error The code looks like this

ApplicationConfiguration.java ( configuration class)


@Configuration
@Log4j2
public class ApplicationConfiguration {

    
    @Bean(name="mysqlDS", destroyMethod = "close")
    @Qualifier("mysqlDS")
    public DataSource getDataSource(@Autowired DBConfiguration dbProperties) {
        log.info("Inside getDataSource method");
        HikariConfig jdbcConfig = new HikariConfig();
        jdbcConfig.setJdbcUrl(dbProperties.getDbURL());
        jdbcConfig.setDriverClassName(dbProperties.getDriverClass());
        jdbcConfig.setPoolName(dbProperties.getJdbcPoolName());
        jdbcConfig.setMaximumPoolSize(dbProperties.getMaxPoolSize());
        jdbcConfig.setIdleTimeout(dbProperties.getIdleTimeout());
        jdbcConfig.setMinimumIdle(dbProperties.getMinIdle());
        jdbcConfig.setConnectionTimeout(dbProperties.getConnectionTimeout());
        jdbcConfig.setUsername(dbProperties.getClientKey());
        jdbcConfig.setPassword(dbProperties.getClientSecret());
        return new HikariDataSource(jdbcConfig);
    }
    
    @Bean(name = "jdbcDS")
    public JdbcTemplate getJdbcTemplate(@Autowired DBConfiguration dbProperties) {
        return new JdbcTemplate(getDataSource(dbProperties));
    }
    
    
}

DBConfiguration.java ( getting config properties from service)

@Component
@Getter
@Setter
@Configuration
@ConfigurationProperties("some service")
public class DBConfiguration {

    private String dbURL;
    private String driverClass;
    private String jdbcPoolName;
    private int maxPoolSize;
    private long idleTimeout;
    private int minIdle;
    private long connectionTimeout;
    private String clientKey;
    private String clientSecret;

}

BatchConfig.java ( for creating job)

@Configuration
@EnableBatchProcessing
@Log4j2
public class BatchConfig {
    @Autowired
    DBConfiguration dbProperties;
    
    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
    
    @Autowired
    SWItemReader itemReader ;
    
    @Autowired
    SWItemWriter itemWriter;
    
    @Autowired
    SWItemProcessor batchProcessor;
    
    
    @Bean 
    public Job Job() {
        return jobBuilderFactory.get("batch-job")
                .incrementer(new RunIdIncrementer())
                .flow(Step())
                .end()
                .build();
    }

    
    @Bean
    public Step Step() {
        
        return stepBuilderFactory.get("step")
                .<Users,Managers>chunk(1)
                .reader(itemReader)
                .processor(batchProcessor)
                .writer(itemWriter)
                .build();
    }

SWItemReader.java ( reader to read from db)

@Log4j2
public class SWItemReader extends JdbcCursorItemReader<Users> implements ItemReader<Manager> {
    
    @Autowired
    DBConfiguration dbProperties;
    
    public ApplicationConfiguration applicationConfiguration;
    
    private static final String QUERY_SELECT_PARTNERS ="select query"
         
        
    
     public SWItemReader getItemReader()  {
        SWItemReader swItemReader = new SWItemReader();
        swItemReader.setDataSource(applicationConfiguration.getDataSource(dbProperties));
        swItemReader.setSql(QUERY_SELECT_USERS);
        swItemReader.setFetchSize(100);
        swItemReader.setRowMapper(new UsersRowMapper());
        return swItemReader;
         
    }

}

ERROR

 Error creating bean with name 'BatchConfig': Unsatisfied dependency expressed through field 'swItemReader'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SWItemReader' defined in file [D:\\git\SWItemReader.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: DataSource must be provided"}

seems like the datasource is not being set properly . What am i doing wrong here .



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source