版本号: mybatis-plus 3.3.0 sharding 4.1.0 alibaba.druid 1.1.23
mybatis - plus 内置CRUD 需要在实体类 @TableName("t_user") t_user 逻辑表名
4.1.0的sharding也不支持java1.8的 LocDateTime
以下是我的pom.xml
<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>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>${sharding.jdbc.version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
在目录下新建dataSource.yml文件
文件内容为:
dataSources:
ds0: !!com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.0.100.90:3306/land1?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&nullNamePatternMatchesAll=true&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
ds1: !!com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.0.100.90:3306/land2?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&nullNamePatternMatchesAll=true&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
shardingRule:
tables:
t_user:
actualDataNodes: ds${0..1}.t_user${0..1}
databaseStrategy:
inline:
shardingColumn: city_id
algorithmExpression: ds${city_id % 2}
tableStrategy:
inline:
shardingColumn: sex
algorithmExpression: t_user${sex % 2}
#t_address:
#actualDataNodes: ds${0..1}.t_address
#databaseStrategy:
#inline:
#shardingColumn: lit
#algorithmExpression: ds${lit % 2}
keyGenerator: #自定义主键生成
column: id
type: MyKeyGenerator
bindingTables: #关联表绑定
- t_user
defaultDataSourceName: ds0
defaultDatabaseStrategy:
inline:
shardingColumn: city_id
algorithmExpression: ds${city_id % 2}
defaultTableStrategy:
none:
props:
sql.show: true
重点需要解析yml文件:创建DataSourceConfig 类
import org.apache.shardingsphere.shardingjdbc.api.yaml.YamlShardingDataSourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
@Configuration
public class DataSourceConfig {
private static final String SHARDING_YML_PATH = "shardingjdbc/dataSource.yml";
@Bean
public static DataSource dataSource() throws SQLException, IOException {
return YamlShardingDataSourceFactory.createDataSource(getFile());
}
private static File getFile() throws IOException {
return new ClassPathResource(SHARDING_YML_PATH).getFile();
}
}
分布式自定义主键需要建立以下目录,注意目录名称必须是META-INF下新建service
新建org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator文件 内容为
com.ansun.erp.sharding.entity.ShardingKeyGenerator
以下是自定义的主键,注意主键生成不能超过20位
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicLong;
/**
* @author Adam 分布式自定义主键
* @Title:
* @Package
* @Company 爱善天使健康管理公司
* @Description:
* @date 2020/8/2616:44
*/
public class ShardingKeyGenerator implements org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator {
@Override
public Comparable<?> generateKey() {
//雪花id算法
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
Long id = snowflake.nextId();
return id;
}
@Override
public String getType() {
return "MyKeyGenerator";
}
@Override
public Properties getProperties() {
return null;
}
@Override
public void setProperties(Properties properties) {
}
}
整完之后就可以用了,具体的配置属性请参考: https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/configuration/config-yaml/