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

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

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

我们新建一个springboot工程

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

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

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4.  
  5. <groupId>com.itmuch.boot</groupId>
  6. <artifactId>sharding-jdbc-autoConfiguration</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9.  
  10. <name>sharding-jdbc-autoConfiguration</name>
  11. <url>http://maven.apache.org</url>
  12.  
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <java.version>1.8</java.version>
  16. <spring_boot.version>1.5.9.RELEASE</spring_boot.version>
  17. <sharding.jdbc.version>3.0.0.M1</sharding.jdbc.version>
  18. <druid.version>1.1.3</druid.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26.  
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32.  
  33. <!-- sharding jdbc -->
  34.  
  35. <dependency>
  36. <groupId>io.shardingsphere</groupId>
  37. <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
  38. <version>${sharding.jdbc.version}</version>
  39. </dependency>
  40.  
  41. <dependency>
  42. <groupId>mysql</groupId>
  43. <artifactId>mysql-connector-java</artifactId>
  44. </dependency>
  45.  
  46. <dependency>
  47. <groupId>org.mybatis.spring.boot</groupId>
  48. <artifactId>mybatis-spring-boot-starter</artifactId>
  49. <version>1.3.1</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-devtools</artifactId>
  54. <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
  55. </dependency>
  56. <dependency>
  57. <groupId>com.alibaba</groupId>
  58. <artifactId>druid</artifactId>
  59. <version>${druid.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>com.alibaba</groupId>
  63. <artifactId>fastjson</artifactId>
  64. <version>1.2.47</version>
  65. </dependency>
  66. </dependencies>
  67.  
  68. <!-- 引入spring boot的依赖 -->
  69. <dependencyManagement>
  70. <dependencies>
  71. <dependency>
  72. <groupId>org.springframework.boot</groupId>
  73. <artifactId>spring-boot-dependencies</artifactId>
  74. <version>${spring_boot.version}</version>
  75. <type>pom</type>
  76. <scope>import</scope>
  77. </dependency>
  78. </dependencies>
  79. </dependencyManagement>
  80.  
  81. <!-- 添加spring-boot的maven插件 -->
  82. <build>
  83. <plugins>
  84. <plugin>
  85. <groupId>org.springframework.boot</groupId>
  86. <artifactId>spring-boot-maven-plugin</artifactId>
  87. </plugin>
  88. </plugins>
  89. </build>
  90. </project>

这里主要是这个依赖:

  1. <dependency>
  2. <groupId>io.shardingsphere</groupId>
  3. <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
  4. <version>${sharding.jdbc.version}</version>
  5. </dependency>

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

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

application.yml

  1. server:
  2. port: 9900
  3. spring:
  4. application:
  5. name: shard-jdbc-starter
  6. sharding:
  7. jdbc:
  8. datasource:
  9. names: ds0,ds1,ds2
  10. ds0:
  11. type: com.alibaba.druid.pool.DruidDataSource
  12. driver-class-name: com.mysql.jdbc.Driver
  13. url: jdbc:mysql://localhost:3306/user_0
  14. username: root
  15. password: root
  16. ds1:
  17. type: com.alibaba.druid.pool.DruidDataSource
  18. driver-class-name: com.mysql.jdbc.Driver
  19. url: jdbc:mysql://localhost:3306/user_1
  20. username: root
  21. password: root
  22. ds2:
  23. type: com.alibaba.druid.pool.DruidDataSource
  24. driver-class-name: com.mysql.jdbc.Driver
  25. url: jdbc:mysql://localhost:3306/user_2
  26. username: root
  27. password: root
  28. config:
  29. sharding:
  30. props:
  31. sql.show: true
  32. tables:
  33. user_info:
  34. key-generator-column-name: user_id
  35. actual-data-nodes: ds$->{0..2}.user_info_$->{0..1}
  36. database-strategy:
  37. inline:
  38. sharding-column: user_id
  39. algorithm-expression: ds$->{user_id % 3}
  40. table-strategy:
  41. inline:
  42. sharding-column: user_id
  43. algorithm-expression: user_info_$->{user_id % 2}

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

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

Application.java

  1. @SpringBootApplication
  2. public class Application {
  3.  
  4. public static void main(String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }

自动配置了,那当然得删掉@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

springboot(十四)-分库分表-自动配置的更多相关文章

  1. 三十八. 分库分表概述 配置mycat

    1.搭建mycat 分片服务器   数据库主机 192.168.4.55 使用db1库存储数据 数据库主机 192.168.4.56 使用db2库存储数据 主机 192.168.4.54 运行myca ...

  2. 分库分表(7)--- SpringBoot+ShardingSphere实现分库分表 + 读写分离

    分库分表(7)--- ShardingSphere实现分库分表+读写分离 有关分库分表前面写了六篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理 ...

  3. springboot+mybatisplus+sharding-jdbc分库分表实例

    项目实践 现在Java项目使用mybatis多一些,所以我也做了一个springboot+mybatisplus+sharding-jdbc分库分表项目例子分享给大家. 要是用的springboot+ ...

  4. springboot(十三)-分库分表-手动配置

    sharding-jdbc简介 Sharding-JDBC直接封装JDBC API,可以理解为增强版的JDBC驱动,旧代码迁移成本几乎为零: 可适用于任何基于java的ORM框架,如:JPA, Hib ...

  5. SpringBoot使用Sharding-JDBC分库分表

    本文介绍SpringBoot使用当当Sharding-JDBC进行分库分表. 1.有关Sharding-JDBC 有关Sharding-JDBC介绍这里就不在多说,之前Sharding-JDBC是当当 ...

  6. 分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表

    分库分表(5)--- ShardingSphere实现分库分表 有关分库分表前面写了四篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3. ...

  7. Oracle学习(十四)分表分区

    一.前言 大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机,在尝试添加索引及查询方式修改后,还有没有更有效的解决方案呢? 分库.分表.分区这些概念咱就应该了解一下. 二.分表 假如一个大 ...

  8. 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离

    分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论 ...

  9. Linux 配置 mycat 和 分库分表配置。

    Linux 如何配置mycat? 3.配置mycat 3.1.规定linux的用户名和全名不能叫mycat!!!否则mycat会不生效(原因是影响整个linux系统的环境变量导致mycat的配置环境变 ...

随机推荐

  1. 本周MySQL官方verified/open的bug列表(11月8日至11月14日)

    本周MySQL verified的bug列表(11月8日至11月14日) 1. Bug #70859-DWITH_EXAMPLE_STORAGE_ENGINE=1 is ignored     URL ...

  2. 主线程不能直接调用webservice方法

    @Overrideprotected void onCreate(Bundle savedInstanceState){//StrictMode.setThreadPolicy(new StrictM ...

  3. Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)

    本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...

  4. UCI数据

    http://archive.ics.uci.edu/ml/datasets.html?format=&task=&att=&area=&numAtt=&num ...

  5. jQuery自定义动画

    $(function(){ $(".btn1").click(function(){ $(','opacity':'toggle'}); }); $(".btn2&quo ...

  6. (博弈 sg入门)kiki's game -- hdu -- 2147

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2147 题意: 在一个n*m的棋盘上,从  (1,m),即右上角开始向左下角走. 下棋者只能往左边(lef ...

  7. (DP)To The Max --HDU -- 1081

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 这道题使用到的算法是:预处理+最大连续子串和 如果会做最大连续子串和,那么理解这题就相对简单一些, ...

  8. ZOJ2256 Mincost 2017-04-16 19:36 44人阅读 评论(0) 收藏

    Mincost Time Limit: 2 Seconds      Memory Limit: 65536 KB The cost of taking a taxi in Hangzhou is n ...

  9. ASP.NET MVC Core的TagHelper (高级特性)

    这篇博文ASP.NET MVC Core的TagHelper(基础篇)介绍了TagHelper的基本概念和创建自定义TagHelper的方式,接着继续介绍一些新的看起来比较高级的特性.(示例代码紧接着 ...

  10. UWP开发入门(一)——SplitView

    接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先S ...