zoukankan      html  css  js  c++  java
  • 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名称去比较,和哪个一致,便初始化哪个实现。

  • 相关阅读:
    算法第四章上机实验报告
    算法第四章作业
    算法第三章上机实验报告
    算法第三章作业
    算法第二章上机实验报告
    算法第二章作业
    第五次c++作业总结
    第三次c++作业总结
    Linux上部署Java项目
    JVM类加载
  • 原文地址:https://www.cnblogs.com/mister-w/p/10408622.html
Copyright © 2011-2022 走看看