JdbcTemplate中的数据源是通过DataSource接口注入的,所以可以很容易地切换不同的数据源。
例如,可以定义两个数据源:
DataSource dataSource1 = ...; // 主数据源
DataSource dataSource2 = ...; // 备用数据源
然后注入JdbcTemplate:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource1);
此时,jdbcTemplate使用dataSource1作为数据源执行所有数据库操作。
如果需要切换数据源,可以直接调用jdbcTemplate.setDataSource()方法:
jdbcTemplate.setDataSource(dataSource2);
之后的所有操作都会通过dataSource2连接数据库。
当然,也可以根据条件动态切换数据源:
if (needBackup) {
jdbcTemplate.setDataSource(dataSource2);
} else {
jdbcTemplate.setDataSource(dataSource1);
}
这个功能在有主备数据库架构的系统中很有用,可以根据主数据库链接情况切换到备用数据库。
除了切换DataSource之外,JdbcTemplate也支持切换DB类型。因为DataSource是通用接口,它的实现可以是:
- DriverManagerDataSource:使用JDBC驱动连接数据库
- JndiDataSourceLookup:查找JNDI注册的数据源
- Apache下的DBCP,C3P0连接池等
所以通过切换不同的DataSource实现,JdbcTemplate可以支持MySQL、Oracle、SQL Server等主流数据库。这使得JdbcTemplate具有很好的通用性,适用于多种环境。