设为首页 收藏本站
查看: 638|回复: 0

[经验分享] spring + mybatis 多数据源切换

[复制链接]

尚未签到

发表于 2016-11-27 09:53:18 | 显示全部楼层 |阅读模式
[代码] DbContextHolder

01public class DbContextHolder {

02    //线程安全的ThreadLocal

03    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

04      

05    public static void setDbType(String dbType) {

06        contextHolder.set(dbType);

07    }

08  

09    public static String getDbType() {

10        return ((String)contextHolder.get());

11    }

12    public static void clearDbType() {

13        contextHolder.remove();

14    }

15  

16}




[代码] DynamicDataSource

01import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

02  

03public class DynamicDataSource extends AbstractRoutingDataSource {

04  

05    @Override

06    public Object determineCurrentLookupKey() {

07        return  DbContextHolder.getDbType();

08    }

09  

10}




[代码] spring.xml

01<!-- 数据源属性配置文件 -->

02    <context:property-placeholder location="classpath:ibatis.properties" />

03  

04  

05    <bean id="jksh" class="org.apache.commons.dbcp.BasicDataSource"

06        destroy-method="close">

07        <!-- Connection Info -->

08        <property name="driverClassName" value="${driver.jksh}" />

09        <property name="url" value="${url.jksh}" />

10        <property name="username" value="${username.jksh}" />

11        <property name="password" value="${password.jksh}" />

12  

13        <!-- Connection Pooling Info -->

14        <property name="maxIdle" value="${maxIdle.jksh}" />

15        <property name="maxActive" value="${maxActive.jksh}" />

16        <property name="defaultAutoCommit" value="false" />

17        <property name="timeBetweenEvictionRunsMillis"

18            value="${timeBetweenEvictionRunsMillis.jksh}" />

19        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jksh}" />

20    </bean>

21  

22    <bean id="jclt" class="org.apache.commons.dbcp.BasicDataSource"

23        destroy-method="close">

24        <!-- Connection Info -->

25        <property name="driverClassName" value="${driver.jclt}" />

26        <property name="url" value="${url.jclt}" />

27        <property name="username" value="${username.jclt}" />

28        <property name="password" value="${password.jclt}" />

29  

30        <!-- Connection Pooling Info -->

31        <property name="maxIdle" value="${maxIdle.jclt}" />

32        <property name="maxActive" value="${maxActive.jclt}" />

33        <property name="defaultAutoCommit" value="false" />

34        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis.jclt}" />

35        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jclt}" />

36    </bean>

37  

38  

39    <bean id="dataSource" class="com.jclt.service.commons.DynamicDataSource">

40        <property name="targetDataSources">

41            <map key-type="java.lang.String">

42                <entry key="jksh" value-ref="jksh" />

43                <entry key="jclt" value-ref="jclt" />

44            </map>

45        </property>

46        <property name="defaultTargetDataSource" ref="jksh" />

47    </bean>




[代码] main方法
01import javax.sql.DataSource;

02  

03import org.springframework.context.ApplicationContext;

04import org.springframework.context.support.ClassPathXmlApplicationContext; 

05import org.springframework.core.io.FileSystemResource;

06import org.springframework.core.io.Resource;

07  

08import com.jclt.service.commons.DbContextHolder;

09import com.jclt.service.model.User;

10  

11import org.apache.ibatis.session.SqlSession;

12import org.apache.ibatis.session.SqlSessionFactory;

13import org.mybatis.spring.SqlSessionFactoryBean;

14  

15public class Text {

16  

17    /**

18     * @param args

19     */

20    public static void main(String[] args) {

21        ApplicationContext appContext = new ClassPathXmlApplicationContext("client-beans.xml");

22          

23        DbContextHolder.setDbType("jclt");

24        String res="src/main/resources/ibatis-config.xml";

25        DataSource datasource=(DataSource) appContext.getBean("dataSource");

26              

27        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();

28        bean.setDataSource(datasource);

29        Resource resource=new FileSystemResource(res);

30        bean.setConfigLocation(resource);

31        try {

32            SqlSessionFactory sessionfactory = bean.getObject();

33            SqlSession session=sessionfactory.openSession();

34            User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne");

35            System.out.println(user.getName());

36        } catch (Exception e) {

37            e.printStackTrace();

38        }

39  

40        DbContextHolder.setDbType("jksh");

41        String res1="src/main/resources/ibatis-config.xml";

42        DataSource datasource1=(DataSource) appContext.getBean("dataSource");

43  

44        SqlSessionFactoryBean bean1=new SqlSessionFactoryBean();

45        bean1.setDataSource(datasource1);

46        Resource resource1=new FileSystemResource(res1);

47        bean1.setConfigLocation(resource1);

48  

49        try {

50            SqlSessionFactory sessionfactory = bean.getObject();

51            SqlSession session=sessionfactory.openSession();

52            User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne");

53            System.out.println(user.getName());

54        } catch (Exception e) {

55            e.printStackTrace();

56        }

57  

58  

59  

60  

61    }

62  

63}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306059-1-1.html 上篇帖子: 【持久化框架MyBatis3一】MyBatis版HelloWorld 下篇帖子: Mybatis SQL转义字符与like 查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表