@ConfigurationProperties(prefix = "mysql.one") 后置處理,配置文件中的指定鍵值對映射到一個java實體類上
sharding-jdbc 分庫分表
https://www.cnblogs.com/hongdada/p/9324473.html
https://blog.csdn.net/hy245120020/article/details/85335446
https://blog.51cto.com/14442094/2450074 http://shardingsphere.apache.org/index_zh.html
shrding是由 io/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class 加載的數據源
io/shardingjdbc/spring/boot/SpringBootConfiguration.class
io.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.12.RELEASE</version> com.alibaba.druid.pool.DruidDataSource 多數據源切換不用@Primary指定一個主數據源 ShardingDataSource DruidDataSource 整合 <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.12.RELEASE</version> <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <!--<version>2.0.4.RELEASE</version>--> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency> @Configuration public class MysDruidConfig { // @Primary @Bean(name="dOne") @ConfigurationProperties(prefix = "mysql.one") public DruidDataSource dataSourceOne(){ DruidDataSource dOne = new DruidDataSource(); dOne.setQueryTimeout(300); dOne.setTestWhileIdle(true); dOne.setTestOnBorrow(true); dOne.setTestOnReturn(true); dOne.setTimeBetweenEvictionRunsMillis(600000); dOne.setMinEvictableIdleTimeMillis(300000); dOne.setUrl("jdbc:mysql://127.0.0.1/xmh"); return dOne; } @Bean(name="dTwo") @ConfigurationProperties(prefix = "mysql.two") public DruidDataSource dataSourceTwo(){ DruidDataSource dTwo = new DruidDataSource(); dTwo.setQueryTimeout(300); dTwo.setTestWhileIdle(true); dTwo.setTestOnBorrow(true); dTwo.setTestOnReturn(true); dTwo.setTimeBetweenEvictionRunsMillis(600000); dTwo.setMinEvictableIdleTimeMillis(300000); dTwo.setUrl("jdbc:mysql://127.0.0.1/xmh2"); return dTwo; } @Autowired javax.sql.DataSource shardingDataSource; SpringBootConfiguration s; @Bean(name = "routeDataSource") public RouteDataSource dataSource(@Qualifier("dOne")DruidDataSource dOne, @Qualifier("dTwo")DruidDataSource dTwo){ System.out.println("this.shardingDataSource***************"+this.shardingDataSource); System.out.println("DruidDataSource************dOne"+dOne.toString()+" "+dOne.getUrl()+" "+dOne.getMaxActive()); System.out.println("DruidDataSource************dTwo"+dTwo.toString()+" "+dTwo.getUrl()+" "+dTwo.getMaxActive()); Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("dataSourceOne",dOne); targetDataSources.put("dataSourceTwo",shardingDataSource); RouteDataSource dataSource = new RouteDataSource(); dataSource.setTargetDataSources(targetDataSources); dataSource.setDefaultTargetDataSource(dTwo); System.out.println("routeDataSource******************"+dataSource); return dataSource; } } @Mapper public interface MyTestIbatisSharding extends BaseMapper<String> { @MyDataSource(dataSourceName="dataSourceTwo") @Select("select order_id from t_order ") List<String> selectStr(); } @Autowired cn.com.xmh.ibatisMapper.MyTestIbatisSharding MyTestIbatisSharding; System.out.println(" MyTestIbatisSharding*********** "+MyTestIbatisSharding.selectStr()); spring-boot2以上不能使用_ sharding.jdbc.datasource.names=ds0,ds1 sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/xmh sharding.jdbc.datasource.ds0.username=root sharding.jdbc.datasource.ds0.password=admin sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/xmh2 sharding.jdbc.datasource.ds1.username=root sharding.jdbc.datasource.ds1.password=admin sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds${user_id % 2} sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds${0..1}.t_order_${0..1} sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_${order_id % 2} sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds${0..1}.t_order_item_${0..1} sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_${order_id % 2} sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id
springboot引入mybatis的xml配置 commons-dbcp 使用默認數據源 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.5.8.RELEASE</version> </parent> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> import org.apache.ibatis.annotations.Mapper; @Mapper public interface MyDaoMapperTest { public List<TUser> queryAll(); } F:\study-idea\space\myboot\src\main\resources\MyMappers\myDaoTestMapper.xml中namespace設置 <mapper namespace="cn.com.myBatisXml.MyDaoMapperTest"> @Resource MyDaoMapperTest myDaoMapperTest; System.out.println(myDaoMapperTest.queryAll()); springboot引入mybatis的xml配置 commons-dbcp 使用默認數據源 使用shardingjdbc 不與DruidDataSource一起使用 @Primary <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <!--<version>2.0.4.RELEASE</version>--> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> sharding.jdbc.datasource.names=ds_0,ds_1 sharding.jdbc.datasource.ds_0.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds_0.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds_0.url=jdbc:mysql://localhost:3306/xmh sharding.jdbc.datasource.ds_0.username=root sharding.jdbc.datasource.ds_0.password=admin sharding.jdbc.datasource.ds_1.type=org.apache.commons.dbcp.BasicDataSource sharding.jdbc.datasource.ds_1.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds_1.url=jdbc:mysql://localhost:3306/xmh2 sharding.jdbc.datasource.ds_1.username=root sharding.jdbc.datasource.ds_1.password=admin sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds_${user_id % 2} sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds_${0..1}.t_order_${0..1} sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_${order_id % 2} sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds_${0..1}.t_order_item_${0..1} sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_${order_id % 2} sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id for (int i = 0; i < 3; i++) { Order order = new Order(); order.setUserId(55); order.setStatus("INSERT_TEST"); order.setOrderId(3); orderRepository.insert(order); } <insert id="insert" useGeneratedKeys="true" keyProperty="orderId"> INSERT INTO t_order ( user_id, status ) VALUES ( #{userId,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR} ) </insert>