美文网首页
jdbcTemplate使用spring动态数据源配置时的问题

jdbcTemplate使用spring动态数据源配置时的问题

作者: 李_lifuqing | 来源:发表于2017-03-29 09:23 被阅读0次

    首先理解下什么是数据源,其实就是一个描述一个数据库连接的各个参数,并提供获取连接的方法,在javax包中,又对应的接口javax.sql.DataSource,打开源码可以看到有两个方法

    public interfaceDataSourceextendsCommonDataSource,Wrapper {

     Connection getConnection()throwsSQLException;

     Connection getConnection(String username,String password) throwsSQLException;

    }

    在网络已经有文章使用spring配置动态数据源,关键类是AbstractRoutingDataSource,

    在实现getConnection时,调用一个关键方法determineTargetDataSource,这个方法就用来实现决定数据源的逻辑,而我们是需要实现determineCurrentLookupKey方法即可。

    但是在使用jdbcTemplate使用动态数据源时发现一个问题,就是只能切换到第一个数据源,其他配置的获取不到,就是没有实现动态数据源的效果,翻看源码会发现jdbcTemplate会使用DataSourceUtils.getConnection,然后调用dodoGetConnection获取连接,源码为

    可以看到有个map,这个是和线程绑定的。而这个map是HashMap,所以我们实现的数据源,并没有每次调用getConnection方法。知道是HashMap也就知道怎么解决了,就是重写hashCode方法,所以在实现AbstractRoutingDataSource类时,重写hashCode方法就可以了,比如这样

    相关文章

      网友评论

          本文标题:jdbcTemplate使用spring动态数据源配置时的问题

          本文链接:https://www.haomeiwen.com/subject/uajsottx.html