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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM