`

spring + mybatis 多数据源切换

阅读更多

[代码] DbContextHolder

01 public 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

01 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
02   
03 public 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方法

01 import javax.sql.DataSource;
02   
03 import org.springframework.context.ApplicationContext;
04 import org.springframework.context.support.ClassPathXmlApplicationContext; 
05 import org.springframework.core.io.FileSystemResource;
06 import org.springframework.core.io.Resource;
07   
08 import com.jclt.service.commons.DbContextHolder;
09 import com.jclt.service.model.User;
10   
11 import org.apache.ibatis.session.SqlSession;
12 import org.apache.ibatis.session.SqlSessionFactory;
13 import org.mybatis.spring.SqlSessionFactoryBean;
14   
15 public 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 }
分享到:
评论

相关推荐

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    在多数据源配置中,Spring能够帮助管理不同的数据源,通过配置bean来切换和控制数据源的使用。 **SpringMVC** 是Spring框架的一部分,专为Web开发设计。它简化了模型-视图-控制器(Model-View-Controller,MVC)的...

    springboot+druid+mybatis多数据源动态切换案例

    8. **测试**:在名为`test`的文件中,可能包含了单元测试或集成测试代码,用于验证多数据源切换和读写分离的正确性。测试用例应该覆盖各种读写操作,确保在不同数据源间的切换无误。 理解并掌握这些知识点,开发者...

    Spring+MyBatis多数据源配置实现

    总之,Spring+MyBatis多数据源配置是大型项目中常见的需求,它通过`AbstractRoutingDataSource`实现了动态数据源选择,结合MyBatis的Mapper接口和注解,可以方便地在多个数据库之间切换,从而满足复杂的数据库访问...

    spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目

    "spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目"是针对这种需求的一个解决方案,旨在提供一种灵活且动态的数据源切换机制。 首先,Spring框架作为Java领域中最受欢迎的应用框架之一,其强大...

    Spring+SpringMVC+Mybatis多数据源

    在企业级应用开发中,Spring、...具体实现时,可以根据项目需求选择合适的方式进行数据源切换,以达到优化性能、提高可扩展性的目的。通过合理配置和设计,可以有效地管理和利用多数据源,提升系统的灵活性和可靠性。

    Springboot+Mybatis+Druid多数据源配置

    综上所述,通过Spring Boot、Mybatis和Druid,我们可以灵活地管理多个数据库,实现数据源的动态切换。在实际项目中,这有助于提高系统的灵活性和可扩展性。多数据源配置对于处理分布式系统、读写分离、数据库分片等...

    Spring+Mybatis 多数据源配置

    3. **配置数据源切换**:Spring的`AbstractRoutingDataSource`可以帮助我们实现数据源的动态切换。这个类会根据某种规则(如ThreadLocal、请求参数等)选择当前操作的数据源。 4. **配置Mybatis**:对于每个数据源...

    Springboot+mybatis+druid多数据源配置(oracle+mybatis)

    总结,Spring Boot结合Mybatis和Druid实现多数据源配置的过程包括:配置数据源、配置Mybatis、创建数据源切换器、以及针对不同数据库的测试。这一过程涉及了Spring Boot的自动配置、依赖注入、配置属性绑定等多个...

    springboot + mybatis(通用mapper) + HikariCP(比durid更快)多数据源

    `SpringBoot`、`MyBatis` 和 `HikariCP` 的结合是目前广泛采用的一种高效、灵活的解决方案,特别是对于处理多数据源场景。这个项目组合利用了它们各自的优势,减少了开发人员的工作量,提高了系统的性能。 首先,`...

    spring+springmvc+mybatis多数据源

    1. 数据源切换的性能:避免在高并发情况下频繁进行数据源切换,以减少性能损耗。 2. 事务一致性:确保跨数据源的事务能够正确提交或回滚,可能需要借助于分布式事务解决方案。 3. 监控和日志:对每个数据源的使用...

    spring+mybatis 数据路由源代码

    总的来说,这个"spring+mybatis 数据路由源代码"项目提供了一种灵活的方式来处理多数据源的场景,允许开发者根据业务需求定制数据路由策略,提高了系统的可扩展性和可用性。对于需要处理大量并发读写操作的系统来说...

    spring +springboot+mybatis+maven 读写分离及事务管理

    spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...

    springboot+mybatis双数据源配置及事务处理

    Spring Boot通过`@EnableAutoConfiguration`注解自动配置了大量常见服务,包括数据源和MyBatis的配置。然而,当涉及到多个数据源时,我们需要手动进行一些配置。 1. **配置双数据源** - 首先,为每个数据源创建一...

    SpringBoot+gradle+mybatis多数据源动态配置

    综上所述,这个项目通过SpringBoot、Gradle和MyBatis,实现了一个支持多数据源动态切换的应用。开发者可以利用AOP在运行时根据业务逻辑选择合适的数据源,提高了系统的灵活性和可扩展性。同时,Gradle的使用使得依赖...

    Spring+MyBatis多数据源配置实现示例

    最后,为了在代码中选择使用哪个数据源,我们可以利用 Spring 的 AOP(面向切面编程)来实现动态数据源切换。创建一个名为 `DynamicDataSource` 的类,实现 `AbstractRoutingDataSource`: ```java @Configuration ...

    Spring+SpringMVC+Mybatis动态链接多数据源

    本项目“Spring+SpringMVC+Mybatis动态链接多数据源”旨在实现一个灵活、可扩展的数据源切换机制,以适应复杂的业务场景。 Spring框架作为Java领域中最广泛使用的轻量级框架,它提供了强大的依赖注入和AOP(面向切...

    Mybatis+Spring+SpringMVC+quartz多数据源切换

    "Mybatis+Spring+SpringMVC+quartz多数据源切换"的架构设计就是为了满足这样的场景。这个项目结合了四个关键的技术组件,它们分别是Mybatis、Spring、SpringMVC和Quartz,下面将详细介绍这些技术以及它们在多数据源...

    springboot + mybatis 多数据源demo

    在现代企业级应用开发中,...通过灵活的配置和智能的路由策略,开发者可以轻松地处理复杂的数据源切换需求,提升系统的健壮性和可扩展性。实践这个示例,将进一步加深对Spring Boot和MyBatis在实际开发中的理解和运用。

    spring+mybatis 多个数据源调用示例

    在Spring+Mybatis框架中,实现多个数据源的调用是一项常见的需求,特别是在大型系统或者分布式环境中,可能需要连接不同的数据库来处理不同的业务数据。以下是一个详细的多数据源配置和使用的指南。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics