SpringBoot-缓存
参考文献
SpringBoot2 实战之旅
Spring Cache
Spring Cache是Spring3.1以后引入的新技术.
其核心思想是:当调用一个缓存方法时,会把该方法参数和返回值作为一个键值对存档在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回,从实现缓存的功能.
12345678910111213141516171819202122232425262728<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency><!-- redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
SpringBoot-整合SpringDataJPA+MyBatisPlus多数据源配置
参考文献
Springboot整合mybatis实现多数据源所遇到的问题
springboot + mybatis-plus 分包实现多数据源配置
required a bean of type ‘org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder’ that could not be found
JPA之EntityManager踩坑及解决:更改PersistenceContext
背景
公司项目最初数据库访问层使用的是Spring Data JPA后期由于内部原因改换使用MyBatis Plus,由于业务需要对接第三方数据需要直接访问第三方的数据库,故而要配置MyBatis Plus多数据源.
环境以及项目技术栈
12SpringBoot 2.5.6MyBatis Plus 3.5.1
公共代码
Entity
123456789101112131415161718192021222324252627package com.holelin.mysql.entity;import lombok.Data;i ...
SpringBoot-整合Activiti7
参考文献
Acitvit6 User Guide
环境配置
框架版本
SpringBoot 2.5.7
SpringCloud 2020.0.3
activiti 7.1.0.M6
flyway 8.0.5
mysql 8.0.27
依赖信息
build.gradle配置(修改后的)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697buildscript { ext { springBootVersion = '2.5.7' springCloudVersion = '2020.0.3' activitiVersion = "7.1 ...
SpringBoot-整合Logback
参考文献
SpringBoot配合logback达到日志切割管理通用配置
Logback and Spring Boot’s new springProperty lookup mechanism not working
基础知识
日志等级
1The value of the level attribute admitting one of the case-insensitive string values TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF.
日志级别由低到高TRACE, DEBUG, INFO, WARN, ERROR
遇到的问题
Logback and Spring Boot’s new springProperty lookup mechanism not working(springProperty不起作用)
Logback配置
Spring Boot官方文档指出,根据不同的日志系统,可以按照如下的日志配置
文件名就能够被正确加载,如下:
Logback :logback-spring.xml ...
SpringBoot-整合阿里企业邮箱
参考文献
企业云邮箱POP\SMTP\IMAP地址和端口信息
springboot 发送邮件 465端口
依赖
1234567891011121314151617181920212223<!-- <springboot.version>2.2.2.RELEASE</springboot.version>--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${springboot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
JPA(七)-原理
参考文献
拉钩教育–Spring Data JPA原理与实战
JpaProperties 属性
1234567891011121314151617181920# 可以配置JPA的实现者的原始属性的配置,如:这里我们用的JPA的实现者是hibernate# 那么hibernate里面的一些属性设置就可以通过如下方式实现,具体properties里面有哪些,本讲会详细介绍,我们先知道这里可以设置即可spring.jpa.properties.hibernate.hbm2ddl.auto=none#hibernate的persistence.xml文件有哪些,目前已经不推荐使用#spring.jpa.mapping-resources=# 指定数据源的类型,如果不指定,Spring Boot加载Datasource的时候会根据URL的协议自己判断# 如:spring.datasource.url=jdbc:mysql://localhost:3306/test 上面可以明确知道是mysql数据源,所以这个可以不需要指定;# 应用场景,当我们通过代理的方式,可能通过datasource.u ...
JPA(四)-数据源
参考文献
拉钩教育–Spring Data JPA原理与实战
数据源
配置HikariCP
12345678910111213141516171819202122232425262728293031323334353637## 最小空闲链接数量spring.datasource.hikari.minimum-idle=5## 空闲链接存活最大时间,默认600000(10分钟)spring.datasource.hikari.idle-timeout=180000## 链接池最大链接数,默认是10spring.datasource.hikari.maximum-pool-size=10## 此属性控制从池返回的链接的默认自动提交行为,默认值:truespring.datasource.hikari.auto-commit=true## 数据源链接池的名称spring.datasource.hikari.pool-name=MyHikariCP## 此属性控制池中链接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟spring.datasource.hikari.ma ...
JPA(六)-JPA中其他功能特性
参考文献
拉钩教育–Spring Data JPA原理与实战
JPA中的乐观锁
乐观锁在实际开发过程中很常用,它没有加锁、没有阻塞,在多线程环境以及高并发的情况下 CPU 的利用率是最高的,吞吐量也是最大的。
而 Java Persistence API 协议也对乐观锁的操作做了规定:通过指定 @Version 字段对数据增加版本号控制,进而在更新的时候判断版本号是否有变化。如果没有变化就直接更新;如果有变化,就会更新失败并抛出“OptimisticLockException”异常。我们用 SQL 表示一下乐观锁的做法,代码如下:
12select uid,name,version from user where id=1;update user set name='jack', version=version+1 where id=1 and version=1
乐观锁的实现方法
JPA 协议规定,想要实现乐观锁可以通过 @Version 注解标注在某个字段上面,并且可以持久化到 DB 即可。其支持的类型有如下四种:
intorInteger ...
JPA(三)-审计功能
参考文献
拉钩教育–Spring Data JPA原理与实战
JAP审计功能
Auditing 是帮我们做审计用的,当我们操作一条记录的时候,需要知道这是谁创建的、什么时间创建的、最后修改人是谁、最后修改时间是什么时候,甚至需要修改记录……这些都是 Spring Data JPA 里面的 Auditing 支持的,它为我们提供了四个注解来完成上面说的一系列事情,如下:
@CreatedBy 是哪个用户创建的。
@CreatedDate 创建的时间。
@LastModifiedBy 最后修改实体的用户。
@LastModifiedDate 最后一次修改的时间。
具体实现步骤
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010 ...
JPA(五)-高级查询
参考文献
拉钩教育–Spring Data JPA原理与实战
QueryByExampleExecutor
QueryByExampleExecutor(QBE)是一种用户友好的查询技术,具有简单的接口,它允许动态查询创建,并且不需要编写包含字段名称的查询。
QBE 的基本语法
1234567891011121314public interface QueryByExampleExecutor<T> { //根据“实体”查询条件,查找一个对象 <S extends T> S findOne(Example<S> example); //根据“实体”查询条件,查找一批对象 <S extends T> Iterable<S> findAll(Example<S> example); //根据“实体”查询条件,查找一批对象,可以指定排序参数 <S extends T> Iterable<S> findAll(Example<S&g ...