欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

spring+mybatis 多数据源切换,springmybatis,spring + myb

来源: javaer 分享于  点击 28988 次 点评:65

spring+mybatis 多数据源切换,springmybatis,spring + myb


spring + mybatis 多数据源切换

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();    }}

DynamicDataSource

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {    @Override    public Object determineCurrentLookupKey() {        return  DbContextHolder.getDbType();    }}

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>

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();        }    }}
相关栏目:

用户点评