当前位置: 移动技术网 > IT编程>开发语言>Java > Spring与Mybatis相结合实现多数据源切换功能

Spring与Mybatis相结合实现多数据源切换功能

2019年07月22日  | 移动技术网IT编程  | 我要评论

废话不多说,关键代码如下所示:

1. 代码: dbcontextholder

public class dbcontextholder {
//线程安全的threadlocal
private static final threadlocal<string> contextholder = new threadlocal<string>();
public static void setdbtype(string dbtype) {
contextholder.set(dbtype);
}
public static string getdbtype() {
return ((string)contextholder.get());
}
public static void cleardbtype() {
contextholder.remove();
}
} 

2. 代码 : dynamicdatasource

import org.springframework.jdbc.datasource.lookup.abstractroutingdatasource;
public class dynamicdatasource extends abstractroutingdatasource {
@override
public object determinecurrentlookupkey() {
return dbcontextholder.getdbtype();
}
} 

3.代码: spring.xml

<!-- 数据源属性配置文件 -->
<context:property-placeholder location="classpath:ibatis.properties" />
<bean id="jksh" class="org.apache.commons.dbcp.basicdatasource"
destroy-method="close">
<!-- connection info -->
<property name="driverclassname" value="${driver.jksh}" />
<property name="url" value="${url.jksh}" />
<property name="username" value="${username.jksh}" />
<property name="password" value="${password.jksh}" />
<!-- connection pooling info -->
<property name="maxidle" value="${maxidle.jksh}" />
<property name="maxactive" value="${maxactive.jksh}" />
<property name="defaultautocommit" value="false" />
<property name="timebetweenevictionrunsmillis"
value="${timebetweenevictionrunsmillis.jksh}" />
<property name="minevictableidletimemillis" value="${minevictableidletimemillis.jksh}" />
</bean>
<bean id="jclt" class="org.apache.commons.dbcp.basicdatasource"
destroy-method="close">
<!-- connection info -->
<property name="driverclassname" value="${driver.jclt}" />
<property name="url" value="${url.jclt}" />
<property name="username" value="${username.jclt}" />
<property name="password" value="${password.jclt}" />
<!-- connection pooling info -->
<property name="maxidle" value="${maxidle.jclt}" />
<property name="maxactive" value="${maxactive.jclt}" />
<property name="defaultautocommit" value="false" />
<property name="timebetweenevictionrunsmillis" value="${timebetweenevictionrunsmillis.jclt}" />
<property name="minevictableidletimemillis" value="${minevictableidletimemillis.jclt}" />
</bean>
<bean id="datasource" class="com.jclt.service.commons.dynamicdatasource">
<property name="targetdatasources">
<map key-type="java.lang.string">
<entry key="jksh" value-ref="jksh" />
<entry key="jclt" value-ref="jclt" />
</map>
</property>
<property name="defaulttargetdatasource" ref="jksh" />
</bean> 

4. 代码:main方法

import javax.sql.datasource;
import org.springframework.context.applicationcontext;
import org.springframework.context.support.classpathxmlapplicationcontext; 
import org.springframework.core.io.filesystemresource;
import org.springframework.core.io.resource;
import com.jclt.service.commons.dbcontextholder;
import com.jclt.service.model.user;
import org.apache.ibatis.session.sqlsession;
import org.apache.ibatis.session.sqlsessionfactory;
import org.mybatis.spring.sqlsessionfactorybean;
public class text {
/**
* @param args
*/
public static void main(string[] args) {
applicationcontext appcontext = new classpathxmlapplicationcontext("client-beans.xml");
dbcontextholder.setdbtype("jclt");
string res="src/main/resources/ibatis-config.xml";
datasource datasource=(datasource) appcontext.getbean("datasource");
sqlsessionfactorybean bean=new sqlsessionfactorybean();
bean.setdatasource(datasource);
resource resource=new filesystemresource(res);
bean.setconfiglocation(resource);
try {
sqlsessionfactory sessionfactory = bean.getobject();
sqlsession session=sessionfactory.opensession();
user user=session.selectone("com.jclt.service.dao.readjksh.findone");
system.out.println(user.getname());
} catch (exception e) {
e.printstacktrace();
}
dbcontextholder.setdbtype("jksh");
string res1="src/main/resources/ibatis-config.xml";
datasource datasource1=(datasource) appcontext.getbean("datasource");
sqlsessionfactorybean bean1=new sqlsessionfactorybean();
bean1.setdatasource(datasource1);
resource resource1=new filesystemresource(res1);
bean1.setconfiglocation(resource1);
try {
sqlsessionfactory sessionfactory = bean.getobject();
sqlsession session=sessionfactory.opensession();
user user=session.selectone("com.jclt.service.dao.readjksh.findone");
system.out.println(user.getname());
} catch (exception e) {
e.printstacktrace();
}
}
}

以上所述是小编给大家介绍的spring与mybatis相结合实现多数据源切换功能,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网