zoukankan      html  css  js  c++  java
  • Sharding+SpringBoot+Mybatis 读写分离

    基于Sharding JDBC的读写分离

    1.引入pom.xml

    
        <dependencies>
            <!--  mybatis -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>2.1.5</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.0.3</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>4.0.0-RC2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/io.shardingjdbc/sharding-jdbc-core -->
            <dependency>
                <groupId>io.shardingjdbc</groupId>
                <artifactId>sharding-jdbc-core</artifactId>
                <version>2.0.3</version>
            </dependency>
    
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    

    2.建立实体类

    
    public class User {
        @Id
        private Integer id;
        private String name;
        private Integer age;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    

    3.建立mapper

    public interface UserMapper extends Mapper<User> {
    }
    

    4.建立service

    
    /**
     * @description:
     * @author: mmc
     * @create: 2020-03-09 23:26
     **/
    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public void add(User user){
            userMapper.insert(user);
        }
    
    
        public List<User> list(){
           return userMapper.selectAll();
        }
    }
    

    5.建立controller

    /**
     * @description:
     * @author: mmc
     * @create: 2020-03-09 23:27
     **/
    @RestController
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @RequestMapping("/addUser")
        public void add(User user){
            userService.add(user);
        }
    
    
        @RequestMapping("/selectUser")
        public List<User> selectUser(){
            return userService.list();
        }
    
        @RequestMapping("/addAndList")
        public List<User> addAndList(User user){
            userService.add(user);
            return userService.list();
        }
    }
    
    

    6.写配置文件

    
    spring.shardingsphere.datasource.names=master,slave0
    
    spring.shardingsphere.datasource.master.type=org.apache.commons.dbcp.BasicDataSource
    spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
    spring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
    spring.shardingsphere.datasource.master.username=root
    spring.shardingsphere.datasource.master.password=0490218292
    
    
    spring.shardingsphere.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSource
    spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
    spring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3306/slave0?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
    spring.shardingsphere.datasource.slave0.username=root
    spring.shardingsphere.datasource.slave0.password=0490218292
    
    
    
    spring.shardingsphere.masterslave.name=ms
    spring.shardingsphere.masterslave.master-data-source-name=master
    spring.shardingsphere.masterslave.slave-data-source-names=slave0
    
    spring.shardingsphere.props.sql.show=true
    

    7.启动类

    @SpringBootApplication
    @MapperScan("com.mmc.master.mapper")
    public class ShardingApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ShardingApplication.class,args);
        }
    }
    

    8.测试

    先在浏览器中测试新增是否是走主库

    http://localhost:8080/addUser?name=wangxiao&age=11

    在测试查询是否走的从库

    http://localhost:8080/selectUser

    注:本文描述的主从库并没有配置真正的主从关系,所以数据并没有同步,仅供学习读写分离。

  • 相关阅读:
    摘抄博文
    html5中getContext()方法和CanvasRenderingContext2D对象详解
    三十四、Android Spinner控件之键值对用法
    二十七、Android之GPS定位详解
    J2EE用监听器实现同一用户只能有一个在线
    三十二、Android上传文件至服务器
    二十六、Android WebView缓存
    三十九、Android原理 不需要关闭后台运行程序
    三十七、android sqlite3详解
    struts2之注解权限控制
  • 原文地址:https://www.cnblogs.com/javammc/p/12470838.html
Copyright © 2011-2022 走看看