书籍推荐

书名:深入浅出Spring Boot 2.x

作者:杨开振

出版社:人民邮电出版社

demo: https://gitee.com/threenut/spring-boot

讲的很细致, 把一些很基础的SSM相关都细细的讲解了; 入门springboot必读;

读后感

springboot特点

  • 1.创建独立的 Spring 应用程序

  • 2.直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)

  • 3.提供自以为是的“入门”依赖项以简化您的构建配置

  • 4.尽可能自动配置 Spring 和 3rd 方库

  • 5.提供生产就绪功能,例如指标、健康检查和外部化配置

  • 6.完全无需代码生成,无需 XML 配置(自动装配)

1.整合mybatis

  1. 配置数据源, 连接数据库
  2. MyBatis的配置文件包括两个大的部分,一是基础配置文件,一个是映射文件

2.spring事务

事务的特性:原子性, 一致性, 隔离性, 持久性

  1. 事务的隔离级别

    • 未提交读-- 引发问题: 脏读, 不可重复读, 幻读
    • 读写提交-- 引发问题: 不可重复读, 幻读
    • 可重复读-- 引发问题: 幻读
    • 串行化-- 最高级别
  2. 事务的传播行为

    传播行为 是方法之间调用事务采取的策略问题;执行一个批量程序, 极少数的交易不能完成而回滚批量任务调用的其他交易,不应该因为极少数的交易不能完成而回滚批量任务调用的其他交易

    用来修饰 两个事务方法相互调用时, 事务如何处理; 传播机制 针对的是子方法中的传播机制

  • REQUIRED: 需要事务, 默认传播行为, 如果当前存在事务, 沿用当前事务, 否则新建一个事务运行子方法
  • REQUIRES_NEW:无论当前事务是否存在, 都会创建新的事务运行方法
  • NESTED: 在当前方法调用子方法时,如果子方法发生异常,只回滚子方法执行过的SQL,而不回滚当前方法的事务

3.整合Redis

  • 配置对应的redis配置文件后;

  • pom文件添加对应依赖, 使Jedis操作

  • 引入redisTemplate操作值

    1.redis 事务

    1. 简介: 首先Redis是支持一定事务能力的NoSQL,在Redis中使用事务,通常的命令组合是watch... multi...exec,也就是要在一个Redis连接中执行多个命令,这时我们可以考虑使用SessionCallback接口来达到这个目的。其中,watch命令是可以监控Redis的一些键;multi命令是开始事务,开始事务后,该客户端的命令不会马上被执行,而是存放在一个队列里,这点是需要注意的地方,也就是在这时我们执行一些返回数据的命令,Redis也是不会马上执行的,而是把命令放到一个队列里,所以此时调用Redis的命令,结果都是返回null,这是初学者容易犯的错误;exe命令的意义在于执行事务,只是它在队列命令执行前会判断被watch监控的Redis的键的数据是否发生过变化(即使赋予与之前相同的值也会被认为是变化过),如果它认为发生了变化,那么Redis就会取消事务,否则就会执行事务,Redis在执行事务时,要么全部执行,要么全部不执行,而且不会被其他客户端打断,这样就保证了Redis事务下数据的一致性--<深入浅出springboot2.X>
    2. 总结: 如果被观察的key的值发生了改变, 后面的插入换操作将不会成功

    2.spring 缓存注解操作redis

    为了进一步简化Redis的使用,Spring还提供了缓存注解,使用这些注解可以有效简化编程过程

  1. 配置信息 spring 缓存注解操作redis

     spring.cache.type=redis
    spring.cache.cache-names=redisCache
  2. 代码参考

      @Override
    @Transactional
    // 表示先从缓存中通过定义的键查询,如果可以查询到数据,则返回,否则执行该方法,返回数据,并且将返回结果保存到缓存中。
    @Cacheable(value = "redisCache", key = "'redis_entity_'+#id") //取参数id 缓存用户
    public RedisEntity getRedis(Integer id) {
    return redisTestDao.getRedis(id);
    }
    @Override
    @Transactional
    // 使用#result就代表返回的结果对象了
    @CachePut(value = "redisCache", key = "'redis_entity_'+#result.id")
    public RedisEntity saveRedis(RedisEntity redisEntity) {
    // 插入数据时 mybatis 回填实体的id信息
    redisTestDao.saveRedis(redisEntity);
    System.out.println(redisEntity + " ---插入数据时 mybatis 回填实体 的id信息");
    return redisEntity;
    } @Override
    @Transactional
    //表示将方法结果返回存放到缓存中。
    @CachePut(value = "redisCache", condition = "#result != 'null'", key = "'redis_entity_'+#redisEntity.id")
    public RedisEntity updateRedis(RedisEntity redisEntity) {
    redisTestDao.updateRedis(redisEntity);
    return redisEntity;
    } @Override
    public List<RedisEntity> findRedis(String redisParam) {
    return redisTestDao.findRedis(redisParam);
    } @Override
    // 通过定义的键移除缓存,它有一个Boolean类型的配置项beforeInvocation,表示 在方法之前或者之后移除缓存。因为其默认值为false,所以默认为方法之后将缓存移除。
    @CacheEvict(value = "redisCache", key = "'redis_entity_'+#id", beforeInvocation = false)
    public int deleteRedis(int id) {
    return redisTestDao.deleteRedis(id);
    }

SpringBoot2.x<<深入浅出>>的更多相关文章

  1. 推荐一本springBoot学习书籍---深入浅出springBoot2.x

    花了几周时间读完了这本书,确实是一本特别详细全面的书,而且不单单只是springBoot, 书中还介绍了许多工作中常用的技术与springBoot的整合使用,当然,也有一些小bug, 因为在代码实践过 ...

  2. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  3. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  4. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  5. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...

  6. DOM 事件深入浅出(一)

    在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...

  7. 深入浅出node(2) 模块机制

    这部分主要总结深入浅出Node.js的第二章 一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 ...

  8. IOS 网络-深入浅出(一 )-> 三方SDWebImage

    首要我们以最为常用的UIImageView为例介绍实现原理: 1)UIImageView+WebCache:  setImageWithURL:placeholderImage:options: 先显 ...

  9. [Machine Learning & Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族

    声明:本博客整理自博友@zhouyong计算广告与机器学习-技术共享平台,尊重原创,欢迎感兴趣的博友查看原文. 写在前面 记得在<Pattern Recognition And Machine ...

  10. [Machine Learning & Algorithm]CAML机器学习系列1:深入浅出ML之Regression家族

    声明:本博客整理自博友@zhouyong计算广告与机器学习-技术共享平台,尊重原创,欢迎感兴趣的博友查看原文. 符号定义 这里定义<深入浅出ML>系列中涉及到的公式符号,如无特殊说明,符号 ...

随机推荐

  1. python代码,读取一个txt文件,将其中的每一行开头加上一个字母a,每一行的结尾加上一个字母b

    with open('name.txt', 'r+') as file: lines = file.readlines() file.seek(0) # 将文件指针移回文件开头 file.trunca ...

  2. 当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践

    本文介绍了利用开源 API 网关 APISIX 加速 NebulaGraph 多个场景的落地最佳实践:负载均衡.暴露接口结构与 TLS Termination. API 网关介绍 什么是 API 网关 ...

  3. Nebula Graph 源码解读系列 | Vol.03 Planner 的实现

    上篇我们讲到 Validator 会将由 Parser 生成的抽象语法树(AST)转化为执行计划,这次,我们来讲下执行计划是如何生成的. 概述 Planner 是执行计划(Execution Plan ...

  4. 机器学习策略篇:详解训练/开发/测试集划分(Train/dev/test distributions)

    训练/开发/测试集划分 设立训练集,开发集和测试集的方式大大影响了或者团队在建立机器学习应用方面取得进展的速度.同样的团队,即使是大公司里的团队,在设立这些数据集的方式,真的会让团队的进展变慢而不是加 ...

  5. 【架构师视角系列】QConfig配置中心系列之Server端(三)

    声明 原创文章,转载请标注.https://www.cnblogs.com/boycelee/p/17993697 <码头工人的一千零一夜>是一位专注于技术干货分享的博主,追随博主的文章, ...

  6. Zabbix“专家坐诊”第183期问答汇总

    问题一 Q:老师,请问一下zabbix采集的数据怎么过滤,获取数据是nottime=20:30 notafter=3,怎么过滤出netafter=3 ?谢谢. A:过滤器设置如下图. 问题二 Q:大佬 ...

  7. 本地锁 & 分布式锁

    引子: 解决缓存击穿问题 synchronized (this){代码块} public synchronized Map<String,List<Catelog2Vo>> g ...

  8. linux脚本免密的方法/不用输入密码

    第一种方法:使用管道(上一个命令的 stdout 接到下一个命令的 stdin):在脚本首行添加 #!/bin/bashecho password | sudo -S apt-get update 第 ...

  9. QSAN: A Quantum-probability based Signed Attention Network for Explainable False Information Detection-CIKM20

    一.摘要 在社交媒体上的虚假信息检测具有挑战性,因为它通常需要烦冗的证据收集,但又缺乏可用的比较信息.从用户评论中挖掘出的线索作为群体智慧,可能对这项任务有相当大的好处. 然而,考虑到内容和评论的隐式 ...

  10. UDP、IMCP、ARP协议通过netmap解析的实现。

    上一篇文章我们讲了一个异步的线程池大概需要如何去实现,现在的话,我们如何来解析一个UDP的包. 环境的搭配 这个环境的问题困扰了很久,这个netmap已经不再更新了,支持Ubuntu16.04-Ubu ...