我有OracleConfiguration类,其中定义了DataSource和Jdbctemplate。下面是代码片段
@Configuration
//@ConfigurationProperties("oracle")
@PropertySource("classpath:dev.properties")
public class OracleConfiguration {
//omitted variable names,getters n setter for brevity
DataSource dataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setDriverType(driverType);
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setURL(url);
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.setResultsMapCaseInsensitive(true);
return jdbcTemplate;
}
现在要连接到每个存储库中的数据库,我将创建一个实例 JdbcTemplate并使用可以正常工作的Autowire对其进行注释。
@Component
public class RolesDaoImpl implements RolesDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// works fine able to perform jdbc operations
但是我读到每个数据库模式应该只有一个JdbcTemplate实例。那么如何使这个JdbcTemplate代码通用。我尝试了以下方法,但是我无法使用以下技术连接到Db
public class JdcTemplateDaoImpl {
private JdbcTemplate jdbcTemplate; //SETTER NOT REQUIRED
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setDataSource ( DataSource dataSource )
{
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
我的所有其他DaoImpl都可以扩展此JdcTemplateDaoImpl,我该如何实现?
答案 0 :(得分:1)
从发布的配置来看,JdbcTemplate
似乎是单例bean(作用域单例是spring的默认范围)。
因此,在应用程序上下文中有一个JdbcTemplate类型的实例,它被注入到存储库中。 在不同的存储库中放置一个断点,可能会发现实例是相同的(内存中的地址相同)。
因此不需要最后一个代码段中提供的技术
为什么您认为它不是同一实例?