shardingsphere 分库分表 demo 配置
时间: 2023-10-19 11:09:07 浏览: 183
分库分表demo项目.zip
以下是一个基本的 Shardingsphere 分库分表 demo 配置:
1. 引入依赖
首先需要在项目中引入 Shardingsphere 的相关依赖,具体版本号可根据需求自行选择。
```xml
<!-- ShardingSphere JDBC Core APIs -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-core-jdbc</artifactId>
<version>${sharding.version}</version>
</dependency>
<!-- ShardingSphere JDBC Spring Boot Starter -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding.version}</version>
</dependency>
```
2. 配置数据源
在 application.yml 中配置数据源信息,包括主库和从库的信息。
```yml
spring:
datasource:
# 主库数据源
master:
jdbc-url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# 从库数据源
slave1:
jdbc-url: jdbc:mysql://localhost:3306/slave_db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave2:
jdbc-url: jdbc:mysql://localhost:3306/slave_db2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
```
3. 配置分库分表规则
在 application.yml 中配置分库分表规则,包括分库规则和分表规则。
```yml
sharding:
# 分库规则
default-database-strategy:
standard:
sharding-column: user_id
precise-algorithm-class-name: com.example.demo.algorithm.ModuloDatabaseShardingAlgorithm
# 分表规则
tables:
user:
actual-data-nodes: master.user_${0..1}
table-strategy:
standard:
sharding-column: id
precise-algorithm-class-name: com.example.demo.algorithm.ModuloTableShardingAlgorithm
```
其中,ModuloDatabaseShardingAlgorithm 和 ModuloTableShardingAlgorithm 是自定义的分库分表算法,这里只是简单示例。
4. 编写 DAO 层代码
在 DAO 层编写相应的代码,使用 ShardingSphere 提供的 API 完成数据库操作,例如:
```java
@Repository
public class UserDaoImpl implements UserDao {
private final JdbcTemplate jdbcTemplate;
@Autowired
public UserDaoImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public User getById(Long id) {
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
}
@Override
public void save(User user) {
String sql = "INSERT INTO user(id, user_id, name) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, user.getId(), user.getUserId(), user.getName());
}
}
```
5. 测试分库分表效果
编写测试代码,测试分库分表的效果,例如:
```java
@SpringBootTest
class UserDaoImplTest {
@Autowired
private UserDao userDao;
@Test
void testSave() {
User user = new User();
user.setId(1L);
user.setUserId(1L);
user.setName("张三");
userDao.save(user);
}
@Test
void testGetById() {
User user = userDao.getById(1L);
System.out.println(user);
}
}
```
至此,一个简单的 Shardingsphere 分库分表 demo 配置就完成了。
阅读全文