专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 数据库

aop兑现动态数据库

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
aop实现动态数据库

最近做了个项目,他们要求在主数据库中存一个表,记录了所有要连接的数据库,然后客户可以任意选择要连接哪个数据库。但是,连到那个数据库,只是获取某一部分信息,而像日志、注释等信息还要存在主库中。

我们选的是ibatis框架作为数据库层,用mysql实验的时候,是用c3p0创建动态数据库,然后调用getSqlMapClientTemplate().setDataSource(DataSource dataSource)方法将数据源赋给ibtis,这样换数据源时,spring不用重启就可以。

但后来换了sqlserver发现不行,虽然数据库照样创建,但是ibatis还是连接的以前的主库,所以为这个烦恼了很长时间,现在想了一个方法,用aop来实现切换库。

@Before("execution(public * com.casic.dao.DmRleaseDao.*(..)) or execution(public * com.casic.dao.ReleaseHistoryDao.*(..)) or execution(public * com.casic.dao.ReleaseObjectDao.*(..)) "
			+ " or execution(public * com.casic.dao.ReleaseResourceDao.*(..)) or execution(public * com.casic.dao.SecuritLevelDao.*(..)) or execution(public * com.casic.dao.StructureDmoduleDao.*(..))"
			+ " or execution(public * com.casic.dao.StructureObjectDao.*(..))")
	public void changeDataSource() {
		//得到当前项目的action
		ProjectAction pa = new ProjectAction();
		//获得用户选择的数据库
		String dataSource = (String) pa.getSession().get("dataSource");
		if (dataSource != null && !dataSource.equals("")) {
			System.out.println("改变数据源++++++++++++++++++++++++++++++++++++");
			System.out.println(pa.getSession().size()
					+ ".....................................");
			System.out.println(pa.getSession().get("dataSource")
					+ "------------------------------");
			this.getSqlMapClientTemplate().update(
					"DataSource.changeDataSource", dataSource);
		}
	}

 而在DataSource.xml里,这样

<update id="changeDataSource"  parameterClass="java.lang.String">
  		use #value#;
</update> 
 就可以在每一个dao类中的方法执行前执行一次use XXX,来切换数据库。虽然方法烂了点,但总算是达到功能了。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: