跳到主要内容

3.2 多数据源

添加数据源

DataSourceProperty prop = new DataSourceProperty();
prop.setName("slave");
prop.setUrl("jdbc:mysql://slave-host:3306/db_slave");
prop.setUsername("root");
prop.setPassword("slave123");
prop.setDriverClassName("com.mysql.cj.jdbc.Driver");

DB.Dynamic.setDataSource(prop);

切换数据源

// 切换到从库
List<User> users = DB.Dynamic.use("slave", () ->
DB.Pojo.select(User.class)
.eq(User::getStatus, 1)
.queryBeanList()
);

// Runnable 重载
DB.Dynamic.use("slave", () -> DB.Pojo.insert(user));

设置默认数据源

DB.Dynamic.setDefaultDataSource(dataSource);

删除数据源

DB.Dynamic.removeDataSource("slave");

读写分离建议

@Service
public class UserService {
// 写操作 → 主库
public void save(User user) {
DB.Tx.run("master", () -> DB.Pojo.insert(user));
}

// 读操作 → 从库
public User getById(Long id) {
return DB.Dynamic.use("slave", () ->
DB.Pojo.select(User.class).eq(User::getId, id).queryBean()
);
}
}