Spring 实现数据隔离
需求
用户数据要同时支持在mysql和redis进行管理、存储。
思路
利用spring的注解,在配置中指定存储类型,启动时识别并选择对应的实现类。
代码
1. 用户管理的接口类
public interface IUserManager { boolean createUser(User user); boolean removeUser(); ... }
2. 基于Mysql的实现类
@Service("mysql") public class MysqlUserManager implements IUserManager { @Autowired private MysqlUserRepository userRepo; @Override public boolean createUser(User user) { //创建用户的具体实现 userRepo.save(user); ... } //重写其他方法 ... }
3. 基于Redis的实现类
@Service("redis") public class RedisUserManager implements IUserManager { @Autowired private RedisUserRepository userRepo; @Override public boolean createUser(User user) { //创建用户的具体实现 userRepo.save(user); ... } //重写其他方法 ... }
4. 配置文件application.yml
//其他配置 ... //支持mysql和redis两种方式 user.store-type: mysql
5. 业务层入口类
@RequestMapping(path = "/") public class UserServiceEndpointImpl { @Resource(name = "${user.store-type}") private IUserManager userManager; @PostMapping(path = "addUser") public String addUser(User user) { //新增用户 userManager.createUser(user); //其他业务逻辑 ... } }
标红的Resource注解位置,在SpringBoot程序启动时,会去读取配置中的user.store-type变量,读到的值会和2、3中的Service名称去比较,和哪个一致,便初始化哪个实现。