• springboot(十四)-分库分表-自动配置


    上一节我们是手动配置数据源的,直接在java代码里写数据库的东西,这操作我个人是不喜欢的。我觉得这些东西就应该出现在application.yml文件中。

    还有,万一我们的项目在使用之后,突然需要改变分库分表规则了。我们还要去停服更新。这里有人要说了,你改application.yml文件,你也要停服更新呐!

    当然,如果我们的项目不是分布式的,就一单体项目,我们停服更新下也很快的,没多大影响!但是我们如果都用到分库分表了,那通常来说,这个项目基本是分布式系统,就是说我们用了springCloud微服务框架。而微服务框架是可以在不停服的情况下更新application.yml文件的。(Spring Cloud Config,这是微服务框架统一管理配置的组件,以后我会在我的springcloud模块下面说,当然目前博客园上一定有很多人发布过了这篇,想了解的大家看看咯!)

    我们新建一个springboot工程

    artifactId设为sharding-jdbc-autoConfiguration.目录结构

    大家可以看到,目录结构和上一节手动配置一样一样的,就是把config目录下面的三个java文件删掉了。我们说说其他不同的。

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.itmuch.boot</groupId>
      <artifactId>sharding-jdbc-autoConfiguration</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>sharding-jdbc-autoConfiguration</name>
      <url>http://maven.apache.org</url>
    
      <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <spring_boot.version>1.5.9.RELEASE</spring_boot.version>
            <sharding.jdbc.version>3.0.0.M1</sharding.jdbc.version>
            <druid.version>1.1.3</druid.version>
        </properties>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            
            <!-- sharding jdbc -->
            
           <dependency>
                <groupId>io.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>${sharding.jdbc.version}</version>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
        </dependencies>
        
         <!-- 引入spring boot的依赖 -->
      <dependencyManagement>
        <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-dependencies</artifactId>
               <version>${spring_boot.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
        </dependencies>
      </dependencyManagement>
    
      <!-- 添加spring-boot的maven插件 -->
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>

    这里主要是这个依赖:

    <dependency>
                <groupId>io.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>${sharding.jdbc.version}</version>
    </dependency>

    你看你看,这是个starter唉,说明,springboot都帮我们配置好了。这个版本一定要选择3.0.0.M1,选3.0.0会报错。启动时找不到数据源。

    我们这次就用阿里的druid数据库连接池吧。

    application.yml

    server:
      port: 9900
    spring:
      application:
        name: shard-jdbc-starter
    sharding:
      jdbc:
        datasource:
          names: ds0,ds1,ds2
          ds0:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://localhost:3306/user_0
            username: root
            password: root
          ds1:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://localhost:3306/user_1
            username: root
            password: root
          ds2:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://localhost:3306/user_2
            username: root
            password: root
        config:
          sharding:
            props:
              sql.show: true
            tables:
              user_info:
                key-generator-column-name: user_id
                actual-data-nodes: ds$->{0..2}.user_info_$->{0..1}
                database-strategy:
                  inline:
                    sharding-column: user_id
                    algorithm-expression: ds$->{user_id % 3}
                table-strategy:
                  inline:
                    sharding-column: user_id
                    algorithm-expression: user_info_$->{user_id % 2}

    这个文件里所有内容,除了我配置了下端口,指定应用别名,其他所有东西都和我们上面提到的删掉的三个java类做的事情一样一样的。

    定义三个数据库,指定分库分表的目标数据表,分库算法,分表算法,一目了然。

    Application.java

    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

    自动配置了,那当然得删掉@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })注解了呀!

    其他

    其他所有的类和xml文件都不变。

    测试

    启动application.java类,记得先清空一下数据库。访问localhost:9900/insert/1

    插入100条数据,看数据库六张表,是不是和前面一样。哦了嘛!

    大家觉得那种方式好?我是一定会选自动配置的。


    代码下载地址:https://gitee.com/fengyuduke/my_open_resources/blob/master/sharding-jdbc-autoConfiguration.rar

  • 相关阅读:
    简单C#、asp.net mvc验证码的实现
    c# 局域网文件传输实例
    c# http get请求与post请求实例
    轻松3步实现c#windowsform窗体美化
    c#内部类的使用
    java
    java
    java
    java
    java
  • 原文地址:https://www.cnblogs.com/fengyuduke/p/10697081.html
Copyright © 2020-2023  润新知