• SpringBoot2.0整合Sharding-Jdbc


    maven:

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.0-beta</version>
            </dependency>
            <dependency>
                <groupId>io.shardingjdbc</groupId>
                <artifactId>sharding-jdbc-core</artifactId>
                <version>2.0.3</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
    
        </build>

    yml:

    mybatis-plus:
    #  mapper-locations: classpath*:/mapper/*.xml
      global-config:
        db-config:
          column-underline: true
    #shardingjdbc配置      
    sharding:
      jdbc:
        data-sources:
         ###配置第一个从数据库 名称随便起
          ds_slave_0:
            password: root
            jdbc-url: jdbc:mysql://192.168.91.9:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true
            driver-class-name: com.mysql.jdbc.Driver
            username: root
          ###主数据库配置   名称随便起
          ds_master:
            password: root
            jdbc-url: jdbc:mysql://192.168.91.8:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true
            driver-class-name: com.mysql.jdbc.Driver
            username: root
        ###配置读写分离    
        master-slave-rule:
        ###配置从库选择策略,提供轮询与随机,这里选择用轮询 如果从做了集群 查询时候做轮训查询
          load-balance-algorithm-type: round_robin
          ####指定从数据库 如果多个从 用逗号隔开
          slave-data-source-names: ds_slave_0
          name: ds_ms
          ####指定主数据库
          master-data-source-name: ds_master

    config配置:

    import java.sql.SQLException;
    import java.util.Map;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.google.common.collect.Maps;
    
    import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;
    import lombok.extern.log4j.Log4j2;
    
    @Configuration
    @EnableConfigurationProperties(ShardingMasterSlaveConfig.class)
    @Log4j2
    // 读取ds_master主数据源和读写分离配置
    @ConditionalOnProperty({ "sharding.jdbc.data-sources.ds_master.jdbc-url",
            "sharding.jdbc.master-slave-rule.master-data-source-name" })
    public class ShardingDataSourceConfig {
    
        @Autowired
        private ShardingMasterSlaveConfig shardingMasterSlaveConfig;
    
        @Bean
        public DataSource masterSlaveDataSource() throws SQLException {
            final Map<String, DataSource> dataSourceMap = Maps.newHashMap();
            dataSourceMap.putAll(shardingMasterSlaveConfig.getDataSources());
            final Map<String, Object> newHashMap = Maps.newHashMap();
            // 创建 MasterSlave数据源
            DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap,
                    shardingMasterSlaveConfig.getMasterSlaveRule(), newHashMap);
            log.info("masterSlaveDataSource config complete");
            return dataSource;
        }
    
    }
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    import com.zaxxer.hikari.HikariDataSource;
    
    import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
    import lombok.Data;
    
    @Data      //表示读取本底配置文件 前缀sharding.jdbc
    @ConfigurationProperties(prefix = "sharding.jdbc")
    public class ShardingMasterSlaveConfig {
    
        // 存放本地多个数据源   最终放在map集合中   key为yml配置的 ds_slave_0
        private Map<String, HikariDataSource> dataSources = new HashMap<>();
    
        private MasterSlaveRuleConfiguration masterSlaveRule;
    }

    上面为核心代码

    下面是辅助的:

    Controller:

    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.mayikt.entity.UserEntity;
    import com.mayikt.service.UserService;
    
    @RestController
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @RequestMapping("/findUser")
        public List<UserEntity> findUser() {
            return userService.findUser();
        }
    
        @RequestMapping("/insertUser")
        public String insertUser(String userName) {
            return userService.insertUser(userName) > 0 ? "success" : "fail";
        }
    
    }

    entity:

    public class UserEntity {
    
        private String userName;
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
    }

    service:

    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.mayikt.entity.UserEntity;
    import com.mayikt.mapper.UserMapper;
    
    @Service
    public class UserService {
        @Autowired
        private UserMapper userMapper;
    
        // 使用读的数据源
        public List<UserEntity> findUser() {
            return userMapper.findUser();
        }
    
        // 使用写的数据源
        public int insertUser(String userName) {
            return userMapper.insertUser(userName);
        }
    
    }

    mapper:

    import java.util.List;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    import com.mayikt.entity.UserEntity;
    
    public interface UserMapper {
        @Select("SELECT * FROM  user_info ")
        public List<UserEntity> findUser();
    
        @Insert("insert into user_info values (#{userName}); ")
        public int insertUser(@Param("userName") String userName);
    }

    启动类:

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan("com.toov5.mapper")
    public class AppMbatis {
        public static void main(String[] args) {
    
            SpringApplication.run(AppMbatis.class, args);
        }
    }
  • 相关阅读:
    原生开发、H5开发和混合开发的区别?
    html5:FileAPI 文件操作实战
    web前端是编程语言中更新迭代最快的
    HTTP请求过程
    CSS :placeholder-shown伪类实现Material Design占位符交互效果
    Css中bem书写规范
    全栈开发者意味着什么?
    利用canvas实现转盘抽奖
    12种开源Web安全扫描程序
    移动端适配必须掌握的基本概念和适配方案
  • 原文地址:https://www.cnblogs.com/toov5/p/10333935.html
Copyright © 2020-2023  润新知