springmvc 通过ioc 切换数据源

先说明我们的项目的情况


我们项目,集合了springmvc+mybatis+ehcache+shiro

花了大量的时间去思考,去调试代码。

最终从4种方案中,成功了两个


解决,数据源切换问题,从而导致的ehcache,虚拟表不匹配问题,从而导致shiroSessionToken,不匹配导致的死循环。


目标

第一种是

最简单,分叉,跳过上述技术,用原生态的方法,直接连接mysql,并得到数据。这样子,仅仅只适合验证一下用户名与密码。

因为要求,这种方案在后来被放弃了。


跳过第二第三种。


第四种方法---取得datasource对象,修改属性。。。。

我们的目标就是切换数据源。

其实也简单。基于,对整体框架的认识。


@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class }) })
public class PagePlugin implements Interceptor {

这框架,用的是@Intercepts,拦截器,然后注入。然后重写intercept方法,上面的注释里面的对象,又写入了invoke对象

connection对象保存在spring-application.xml,里面的datasource里面是写死。

通过调试,发现了,读取的不是文件,而是内存。

提出第四种方案。

问题是得到datasource对象。


自己写了个类,继承了DriverManagerDataSource

http://brothergrup.iteye.com/blog/1543463

感谢博主,提供方法,得到spring ioc 的对象的方案


public class JDBCTest extends DriverManagerDataSource{
	
	
	public void changeJDBC(String url,String username,String password) {
		setUrl(url);
		setUsername(username);
		setPassword(password);
	}
}
<bean id="dataSource" class="junit.test.JDBCTest">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driverClass}" />
	</bean>
	<!-- lpl 自定义注册 -->
	<bean id="springfactory" class="com.framework.util.SpringFactory"></bean>  
	
	<bean id="pagePlugin" class="com.framework.plugin.PagePlugin">
		<property name="properties">
			<props>
				<prop key="dialect">mysql</prop>
				<prop key="pageSqlId">.*query.*</prop>
			</props>
		</property>
	</bean>
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值