I am using multiple data sources in my spring boot project as,
application.properties
#first DB integration.datasource.jdbc-url=jdbc:sqlserver://localhost:port1/my_sample_schema1 integration.datasource.username=username integration.datasource.password=password integration.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver integration.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect integration.jpa.show-sql=true #second DB spring.datasource.jdbc-url=jdbc:sqlserver://localhost:port2/my_sample_schema2 spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.platform=org.hibernate.dialect.SQLServer2012Dialect spring.jpa.show-sql=true DBConfig.java
@Configuration public class DBConfig { @Primary @Bean(name = "integrationDataSource") @ConfigurationProperties(prefix = "integration.datasource") public DataSource integrationDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "mainDataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource mainDataSource() { return DataSourceBuilder.create().build(); } @Primary @Autowired @Bean(name = "integrationJdbcTemplate") public JdbcTemplate integrationJdbcTemplate(@Qualifier("integrationDataSource") DataSource integrationDataSource) { return new JdbcTemplate(integrationDataSource); } @Bean(name ="mainJdbcTemplate") @Autowired public JdbcTemplate mainJdbcTemplate(@Qualifier("mainDataSource") DataSource mainDataSource) { return new JdbcTemplate(mainDataSource); } } SampleClass.java
@Slf4j @Component public class SampleClass{ @Autowired private JdbcTemplate mainJdbcTemplate; @Autowired @Qualifier("integrationJdbcTemplate") private static JdbcTemplate integrationTemplate; public static final String SELECT_QUERY = "select * from tableA"; public List<SampleDto> getDBData(SampleDto fileData) { List<SampleDto> data = null; try { data = integrationTemplate.query( SampleClass.SELECT_QUERY, new Object[] { param1, param2 }, new SampleDataMapper()); } catch (DataAccessException e) { log.error(e.getMessage(), e); } return data; } } In the SampleClass.java am getting integrationTemplate as null . Why is this so? mainJdbcTemplate is working. But integrationTemplate is getting as null and not able to excute the query.
@Qualifierand with the exact same name as the defined@Bean(integrationJdbcTemplate) UPDATE, you can't use astaticfield with@Autowired