文章目录
目录
架构搭建
读写分离
pom.xml
xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${fdy-mysql.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${sharding.jdbc.version}</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
fdy-live-user-provider 模块
application.yml
yaml
spring:
datasource:
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:fdy-db-sharding.yaml
# 设置连接池的全局属性
hikari:
pool-name: fdy-user-pool
minimum-idle: 15 # 初始化连接池
maximum-pool-size: 300
connection-init-sql: select 1
connection-timeout: 4000
max-lifetime: 60000
logging:
level:
org.apache.shardingsphere: DEBUG
com.zaxxer.hikari: DEBUG
fdy-db-sharding.yaml
yaml
dataSources:
user_master: ##新表,重建的分表
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver # 统一为 driverClassName
jdbcUrl: jdbc:mysql://192.168.56.101:8808/fdy_live_user?useUnicode=true&characterEncoding=utf8
username: root
password: root
user_slave0: ##新表,重建的分表
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver # 统一为 driverClassName
jdbcUrl: jdbc:mysql://192.168.56.101:8809/fdy_live_user?useUnicode=true&characterEncoding=utf8
username: root
password: root
rules:
- !READWRITE_SPLITTING
dataSources:
#读写分离配置
user_ds:
staticStrategy:
writeDataSourceName: user_master
readDataSourceNames:
- user_slave0
- !SINGLE
# 不分表分分库的默认数据源
defaultDataSource: user_ds
- !SHARDING
tables:
t_user:
actualDataNodes: user_ds.t_user_${(0..04).collect(){it.toString().padLeft(2,'0')}}
tableStrategy:
standard:
#指定用于分表的列名。
shardingColumn: user_id
shardingAlgorithmName: t_user-inline
#定义分表算法
shardingAlgorithms:
t_user-inline:
type: INLINE
props:
#根据"user_id"对5取模的结果将作为分表的后缀,范围为00到04,对应五个表,并在左侧填充0。
algorithm-expression: t_user_${(user_id % 5).toString().padLeft(2,'0')}
props:
sql-show: true
ShardingJdbcDatasourceAutoInitConnectionConfig.java
java\org\fdy\live\user\provider\config\ShardingJdbcDatasourceAutoInitConnectionConfig
java
package org.fdy.live.user.provider.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.sql.Connection;
/**
* @author lee
* @description 解决hikari存在bug, 强制hikari进行数据源的初始化操作
*/
@Slf4j
@Configuration
public class ShardingJdbcDatasourceAutoInitConnectionConfig {
@Bean
public ApplicationRunner runner(DataSource dataSource) {
return args -> {
log.info("dataSource: {}", dataSource);
// 手动触发下连接池的连接创建
Connection connection = dataSource.getConnection();
// try (Connection connection = dataSource.getConnection()){}
};
}
}