需求

用户数据要同时支持在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名称去比较,和哪个一致,便初始化哪个实现。

Spring 实现数据隔离的更多相关文章

  1. 理解 spring 事务传播行为与数据隔离级别

    事务,是为了保障逻辑处理的原子性.一致性.隔离性.永久性. 通过事务控制,可以避免因为逻辑处理失败而导致产生脏数据等等一系列的问题. 事务有两个重要特性: 事务的传播行为 数据隔离级别 1.事务传播行 ...

  2. Spring Boot 数据访问集成 MyBatis 与事物配置

    对于软件系统而言,持久化数据到数据库是至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架(ORM).ORM 框架的本质是简化编程中操作数据库的繁琐性,比如可以根据对象生成 S ...

  3. 浅谈Spring的事务隔离级别与传播性

    浅谈Spring的事务隔离级别与传播性 这篇文章以一个问题开始,如果你知道答案的话就可以跳过不看啦@(o・ェ・)@ Q:在一个批量任务执行的过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚 ...

  4. Java如何实现消费数据隔离?

    我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为优质八股文选手 今天继续更新austin项目,如果还没看过该系列的同学可以点开我的历史文章回顾下,在看的过程中不要忘记了点赞哟!建议 ...

  5. ThreadLocal 多线程并发,数据隔离

    ThreadLocal:  创建一个线程本地变量. 本质:在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本. 优点:既实现多线程并发,游兼顾数据的安全性. 区别:Synchro ...

  6. Python_线程、线程效率测试、数据隔离测试、主线程和子线程

    0.进程中的概念 三状态:就绪.运行.阻塞 就绪(Ready):当进程已分配到除CPU以外的所有必要资源,只要获得处理机便可立即执行,这时的进程状态成为就绪状态. 执行/运行(Running)状态:当 ...

  7. Spring04-SpringEL&Spring JDBC数据访问

    一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...

  8. python开发 *进程数据隔离.守护进程,进程同步工具 * 180725

    进程数据隔离.守护进程,进程同步工具 一.进程之间的数据隔离: from multiprocessing import Process n=100 #主程序中变量n= def func(): glob ...

  9. (25)线程---local数据隔离

    线程之间本身是数据共享的,当多个线程同时修改一份数据的时候,数据就可能不 准确,特别是线程量特别大的时候,为了保证数据准确性: (1) 通过线程锁Lock (2)通过local数据隔离 from th ...

随机推荐

  1. m2014-c->c模拟java的hashmap容器类

    转自:http://bbs.csdn.net/topics/390034346 在java中像ArrayList,HashMap都是现成的,在java.util包中,用的时候直接import java ...

  2. onSaveInstanceState

    我们已经分析过Activity的启动流程,从中也分析了Activity的生命周期.而其中有一个生命周期方法:onSaveInstanceState方法,今天我们主要讲解一下onSaveInstance ...

  3. kotlin正式由Goole公布为Android的最新开发语言

    那么,现在大家开发Android的话一般来说都是直接用Java,这个没错吧(高手除外).嗯,那么用力那么久的Java,不知道大家是否有想过Java的不足,已经很多可以优化的地方呢.当然,新修订的版本中 ...

  4. 微信开发工具包,jar包

    https://www.oschina.net/code/snippet_218887_22896 github地址:https://github.com/wuweiit/weixinapi

  5. 【NGUI】Unity3D UIGrid 排序、动态加载与销毁

    本帖最后由 Lucifer_H 于 2014-10-31 09:39 编辑 做 UIGrid 的动态加载是做游戏的装备列表时用到的,装备信息都是从后台发过来的,具体加载的代码如下: [C#] 纯文本查 ...

  6. 转载 hibernate一级缓存和二级缓存的区别

    文章来源:http://blog.csdn.net/defonds/article/details/2308972     hibernate一级缓存和二级缓存的区别 缓存是介于应用程序和物理数据源之 ...

  7. JRebel插件安装配置与破解激活(多方案)详细教程

    JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...

  8. 160426、JavaScript 秘密花园

    简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...

  9. Java操作文件转码

    package downloadTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...

  10. 面试之四:JVM内存区域分配

    1.程序计数器(线程私有)[不会OOM] 记录线程执行的代码位置,每个线程各自独有. 2.栈:虚拟机栈和本地方法栈(线程私有)[会OOM和StackOverflow] 虚拟机栈 每个JAVA方法在执行 ...