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