使用JdbcTemplate的单个实例

时间:2018-09-16 18:23:56

标签: spring spring-mvc jdbctemplate

我有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,我该如何实现?

1 个答案:

答案 0 :(得分:1)

从发布的配置来看,JdbcTemplate似乎是单例bean(作用域单例是spring的默认范围)。

因此,在应用程序上下文中有一个JdbcTemplate类型的实例,它被注入到存储库中。 在不同的存储库中放置一个断点,可能会发现实例是相同的(内存中的地址相同)。

因此不需要最后一个代码段中提供的技术

为什么您认为它不是同一实例?