`
tangyanbo
  • 浏览: 269430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分享我的开源项目-spring+mybatis实现读写分离

阅读更多
先吐槽下博客园,每天都推荐水帖不说,正经的分享技术的博客还他妈的不让上首页,我在那里投入了那么多汗水,什么垃圾东西。

spring+ibatis实现读写分离

特点
无缝结合spring+ibatis,对于程序员来说,是透明的
除了修改配置信息之外,程序的代码不需要修改任何东西
支持spring的容器事务

规则:

基于spring配置的容器事务
读写事务到主库
只读事务到从库
如果没有配置事务,更新语句全部到主库,查询语句均衡到从库
源码地址
qq讨论群:261502547
快速入门
maven依赖
<dependency>
    <groupId>org.springmore</groupId>
    <artifactId>springmore-core</artifactId>
    <version>1.0.0</version>
</dependency>
1
2
3
4
5
dataSource配置(applicationContext.xml中)

<?xml version="1.0" encoding="utf-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        ">
    <!-- C3P0连接池配置 -->
    <bean id="master" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="jdbcUrl">
            <value>jdbc:mysql://192.168.1.246:3306/db1</value>
        </property>
        <property name="user">
            <value>ysb</value>
        </property>
        <property name="password">
            <value>ysb</value>
        </property>
        <property name="initialPoolSize">
            <value>20</value>
        </property>
        <property name="minPoolSize">
            <value>20</value>
        </property>
        <property name="maxPoolSize">
            <value>200</value>
        </property>
        <property name="maxIdleTime">
            <value>255000</value>
        </property>
    </bean>

    <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="jdbcUrl">
            <value>jdbc:mysql://192.168.1.246:3306/db2</value>
        </property>
        <property name="user">
            <value>ysb</value>
        </property>
        <property name="password">
            <value>ysb</value>
        </property>
        <property name="initialPoolSize">
            <value>20</value>
        </property>
        <property name="minPoolSize">
            <value>20</value>
        </property>
        <property name="maxPoolSize">
            <value>200</value>
        </property>
        <property name="maxIdleTime">
            <value>255000</value>
        </property>
    </bean>

    <bean id="dataSource3" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="jdbcUrl">
            <value>jdbc:mysql://192.168.1.246:3306/db3</value>
        </property>
        <property name="user">
            <value>ysb</value>
        </property>
        <property name="password">
            <value>ysb</value>
        </property>
        <property name="initialPoolSize">
            <value>20</value>
        </property>
        <property name="minPoolSize">
            <value>20</value>
        </property>
        <property name="maxPoolSize">
            <value>200</value>
        </property>
        <property name="maxIdleTime">
            <value>255000</value>
        </property>
    </bean>

    <bean id="dataSource" class="org.springmore.core.datasource.DynamicDataSource">
        <property name="master" ref="master" />    
        <property name="slaves">
            <list>
                <ref bean="dataSource2"/>
                <ref bean="dataSource3"/>
            </list>        
        </property>
    </bean>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
整合mybatis配置(applicationContext.xml中)

    <!-- ibatis3 工厂类 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:sqlMapConfig.xml" />
    </bean>
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <bean id="dynamicSqlSessionTemplate" class="org.springmore.core.datasource.DynamicSqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionTemplate" />
    </bean>
1
2
3
4
5
6
7
8
9
10
11
12
事务配置(applicationContext.xml中)

    <!-- 定义单个jdbc数据源的事务管理器 -->
    <bean id="transactionManager"
        class="org.springmore.core.datasource.DynamicDataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 以 @Transactional 标注来定义事务  -->
    <tx:annotation-driven transaction-manager="transactionManager"
        proxy-target-class="true" />       

    <!-- 配置事务的传播特性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED" read-only="false"
                rollback-for="Exception" />
            <tx:method name="delete*" propagation="REQUIRED" read-only="false"
                rollback-for="Exception" />
            <tx:method name="update*" propagation="REQUIRED" read-only="false"
                rollback-for="Exception" />
            <tx:method name="proc*" propagation="REQUIRED" read-only="false"
                rollback-for="Exception" />
            <tx:method name="select*" read-only="true" />
            <tx:method name="*" read-only="false" />
            <!-- <tx:method name="*" read-only="true" /> -->
        </tx:attributes>
    </tx:advice>
    <!-- 那些类的哪些方法参与事务 -->
    <aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* org.springmore.core.dao..*(..))" />
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />
    </aop:config>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dao代码示例:

@Repository("UserMapperImpl")
public class UserMapperImpl implements UserMapper{

    @Autowired
    private DynamicSqlSessionTemplate sqlSessionTemplate;

    //从库
    public List<User> selectByUserNameAndPwd(User user) {
        return sqlSessionTemplate.selectList("selectByUserNameAndPwd", user);
    }

    //主库
    public void insert(User user) {
        sqlSessionTemplate.insert("insert", user);     
    }
}
分享到:
评论

相关推荐

    spring+springmvc+mybatis的整合以及数据库读写分离的测试

    在IT行业中,Spring、SpringMVC和MyBatis是三个非常重要的开源框架,它们分别用于企业级应用的依赖管理、Web层控制和数据持久层操作。本项目将这些框架进行了整合,并进行了数据库读写分离的配置,以提高系统的稳定...

    spring+springmvc+mybatis+maven+mysql数据库读写分离

    本项目结合了Spring、SpringMVC、MyBatis和Maven等技术,与MySQL数据库一起实现读写分离,以提升应用的处理能力。下面将详细解释这些技术及其在读写分离中的作用。 首先,Spring是一个开源的Java平台,它提供了全面...

    springboot+mybatis+druid+redis实现数据库读写分离和缓存

    在现代Web应用开发中,数据库读写分离和缓存技术是提高...通过以上组件的整合,项目能够实现高效、稳定的数据库读写分离和缓存策略,从而提高系统的响应速度和并发处理能力。同时,这种架构也便于后期的维护和扩展。

    springboot+mybatis的读写分离

    Druid是阿里巴巴开源的数据库连接池,它不仅提供了性能监控、SQL解析、防SQL注入等功能,还支持多数据源的配置,非常适合用于实现读写分离。在SpringBoot中,我们可以通过Druid的数据源代理,设置主数据源(用于写...

    Spring MVC +Spring + Mybatis 构建分库分表源码

    通过这个项目,你可以深入理解Spring全家桶和Mybatis如何协同工作,以及如何在实际项目中实现数据库的分库分表策略。同时,博文链接提供的详细教程会进一步帮助你理解和实践这些概念。在学习过程中,务必动手实践,...

    SpringBoot2.7整合SpringSecurity+Jwt+Redis+MySQL+MyBatis完整项目代码

    之后,每次API请求都会携带JWT,Redis和Spring Security共同完成身份验证,MyBatis则负责与MySQL数据库的交互,实现数据的读写操作。这样的设计提高了系统的安全性、性能和可扩展性,是现代Web应用开发中的典型架构...

    Spring+Mybatis+Druid+POI示例整合demo

    在IT领域,尤其是在Java开发中,Spring、Mybatis和Druid是常见的开源框架和技术,而POI则是处理Microsoft Office文档的库。以下是对这些技术及其整合应用的详细说明: 1. **Spring框架**:Spring是一个全面的企业级...

    spring+mybatis+sharding-jdbc

    【标题】"spring+mybatis+sharding-jdbc"是一个基于Spring框架,结合MyBatis持久层框架和Sharding-JDBC分库分表组件的示例项目。该项目旨在展示如何在实际开发中处理大数据量场景下的数据库扩展问题,通过水平扩展...

    Java+Springboot+mybatis+sharding jdbc 实现分库分表

    本项目基于Java、SpringBoot、MyBatis以及ShardingJDBC实现了一个分库分表的解决方案,旨在帮助开发者理解并掌握这一技术。以下是关于这些技术的详细介绍: **Java**: Java是一种广泛使用的面向对象的编程语言,...

    springboot2.X+mybatis+redis

    在Spring Boot项目中,MyBatis可以作为数据访问层,通过Spring Boot的自动配置,实现与数据库的无缝对接。 Redis则是一个开源的、高性能的键值数据库,常被用作缓存服务。它的读写速度非常快,适合处理大量数据的...

    SpringMVC + 德鲁伊+mybatis +mysql 读写分离

    SpringMVC、德鲁伊(Druid)、MyBatis 和 MySQL 是四个在Java Web开发中常用的组件,它们各自承担着不同的职责,而将它们结合在一起则可以构建出一个高效、可扩展的数据库读写分离解决方案。 SpringMVC是Spring框架...

    spring+springmvc+mybatis+mongodb+ActiveMQ+CXF

    Spring MVC是Spring框架的一个子模块,专门用于构建Web应用程序,它通过模型-视图-控制器(Model-View-Controller,MVC)模式实现了业务逻辑、数据处理和用户界面的分离。 MyBatis是一个持久层框架,它将SQL语句与...

    springmvc+mybatis+mysql+log4jdbc+excel 实现sql日志输出和excel导出

    在这个项目中,MySQL作为后端数据存储,存储了所有应用程序需要的数据,与MyBatis配合实现数据的读写。 Log4jdbc是Apache Log4j的一个扩展,专门用于记录Java应用程序执行的SQL语句。它可以在不改变代码的情况下,...

    springboot+mybatis+poi 实现excel导入导出

    Apache POI是Apache软件基金会的开源项目,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在我们的场景中,我们将主要关注POI对于Excel的处理能力,它能读取、创建、修改Excel文件,并且提供...

    spring+springmvc+mybatis搭建的一个湖北电信渠道营销支撑系统附带mysql数据库

    本文将深入探讨如何利用Spring、SpringMVC和MyBatis这三大开源框架,构建一个高效、稳定的湖北电信渠道营销支撑系统,并结合MySQL数据库,实现数据的持久化存储。 首先,Spring框架作为Java企业级应用的核心,提供...

    spring4+springmvc+mybatis3+redis2.8+spring-session框架搭建

    本项目采用了Spring 4、Spring MVC、MyBatis 3、Redis 2.8 和 Spring Session 进行集成,构建了一个高效且可扩展的系统。下面将详细解释这些组件及其在项目中的作用。 1. **Spring 4**: Spring 是一个开源的应用...

    spring+mybatis+sharding-jdbc 1.3.1实现分库分表案例(可直接运行)

    Sharding-JDBC是阿里巴巴开源的轻量级Java框架,它可以在不修改业务代码的情况下,通过配置实现数据库的水平扩展,支持分库分表、读写分离等功能。 接下来,我们详细探讨如何使用Spring、MyBatis和Sharding-JDBC来...

    spring+mybatis+sharding-jdbc 整合

    2. **引入依赖**:在你的项目中,你需要引入Spring、MyBatis和Sharding-JDBC的相关依赖库。这通常通过Maven或Gradle的依赖管理来完成。例如,在Maven的pom.xml文件中,添加如下依赖: ```xml &lt;groupId&gt;org....

    spring + springMVC + mybatis + poi

    【标题】"spring + springMVC + mybatis + poi"是一个经典的Java企业级开发组合,它们共同构建了一个功能强大的后端系统。Spring框架是整个体系的基础,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得...

    Spring mvc+Spring+Mybatis+Redis集成

    本项目涉及的是一个基于Java的Web开发框架集成,包括Spring MVC、Spring、Mybatis以及Redis。以下是对这些技术及其集成的详细阐述: 1. **Spring MVC**: Spring MVC是Spring框架的一部分,它是一个模型-视图-控制...

Global site tag (gtag.js) - Google Analytics