JPA(二)-注解
参考文献
拉钩教育–Spring Data JPA原理与实战
@NonNull、@NonNullApi、@Nullable
从 Spring Data 2.0 开始,JPA 新增了@NonNull @NonNullApi @Nullable,是对 null 的参数和返回结果做的支持。
@NonNullApi:在包级别用于声明参数,以及返回值的默认行为是不接受或产生空值的。
12@org.springframework.lang.NonNullApipackage com.myrespository;
@NonNull:用于不能为空的参数或返回值(在 @NonNullApi 适用的参数和返回值上不需要)
@Nullable:用于可以为空的参数或返回值。
12345//当我们添加@Nullable 注解之后,参数和返回结果这个时候就都会允许为 null 了; @NullableUser findByEmailAddress(@Nullable EmailAddress emailAdress);//返回结果允许为 null,参数不允许为 null 的情 ...
JPA(一)-基础理论
参考文献
拉钩教育–Spring Data JPA原理与实战
基本使用
ORM框架对比
Spring Data Common的依赖关系
数据库连接用的是JDBC
连接池用的是HikariCP
强依赖Hibernate
Spring Boot Starter Data JPA 依赖Spring Data JPA 而Spring Data JPA依赖Spring Data Commons
Repository接口
Repository是Spring Date Common里面的顶级父类接口,操作DB的入口类.
Repository类层次关系
ReactiveCrudRepository 这条线是响应式编程,主要支持当前 NoSQL 方面的操作,因为这方面大部分操作都是分布式的,所以由此我们可以看出 Spring Data 想统一数据操作的“野心”,即想提供关于所有 Data 方面的操作。目前 Reactive 主要有 Cassandra、MongoDB、Redis 的实现。
RxJava2CrudRepository 这条线是为了支持 ...
Spring-Transaction事务
参考文献
Spring 事务失效的 8 大场景,看看都遇到过几个?
Spring官方推荐的@Transactional还能导致生产事故?原来姿势完全错了
当Transactional碰到锁,有个大坑,要小心.
几行烂代码,我赔了16万。
Spring事务隔离级别
Spring提供事5种务隔离级别
@Transaction(isolation=Isolation.DEFAULT): 默认的事务隔离级别,即使用数据库的事务隔离级别.
@Transaction(isolation=Isolation.READ_UNCOMMITTED): 读未提交,这是最低的事务隔离级别,允许其他事务读取未提交的数据,这种级别的事务隔离会产生脏读,不可重复读和幻读.
@Transaction(isolation=Isolation.READ_COMMITTED): 读已提交,这种级别的事务隔离能读取其他事务已修改的数据,不能读取未提交的数据,会产生不可重复读和幻读.
@Transaction(isolation=Isolation.REPEATABLE_READ): 可重复读,这种级别的事务隔离可以防 ...
MySQL(十六)-Explain用法说明
参考文献
MySQL EXPLAIN结果集分析 - 附带大量案例
MySQL 性能优化神器 Explain 使用分析
新特性解读 | MySQL 8.0:explain analyze 分析 SQL 执行过程
MySQL排错指南
https://dev.mysql.com/doc/refman/8.0/en/explain-output.html
MySQL Explain简介
EXPLAIN:查看SQL语句的执行计划
EXPLAIN命令可以帮助我们深入了解MySQL基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用,在优化慢查询时非常有用;
执行explain之后结果集包含如下信息
123456+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | ...
MySQL(十五)-主从复制
参考文献
MySQL 主从复制
主从复制简介
复制是 MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例.
1)主服务器将所有数据和结构更改记录到二进制日志中.
2)从属服务器从主服务器请求该二进制日志并在本地应用其内容.
3)IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog
4)SQL:从relaylog中将sql语句翻译给从库执行
主从复制的方式
目前MySQL支持两种复制方式:
传统方式
基于主库的binlong将日志事件和事件位置复制到从库,从库加以应用来达到主从同步的目的;
GTID方式(MySQL>=5.7推荐使用)
基于GTID的复制中,从库会告知主库已经执行的事务的GTID的值,然后主库会将所有未执行的事务的GTID的列表返回给从库,并且可以保证同一个事务只在指定的从库执行一次;
多种复制类型
异步复制
一个主库,一个或多个从库,数据异步同步到从库.
用于非核心业务场景,不要求数据一致性
半同步复制
在异步复制的基础上,确保任何一个主库上的事物在提交之前至少有一个从库已经收到该事物 ...
SpringBoot-整合SpringBoot Security
参考文献
Spring Boot: 整合Spring Security
SpringSecurity登录原理(源码级讲解)
Spring Security前后端分离两种方案
spring security 在controller层 方法级别使用注解 @PreAuthorize(“hasRole(‘ROLE_xxx’)”)设置权限拦截 ,无权限则返回403
Spring-Security基于源码扩展-自定义登录(二十三)
基于SpringBoot2.2.2.RELEASE
依赖
1234// springboot_version= '2.2.2.RELEASE'implementation "org.springframework.boot:spring-boot-starter:$springboot_version"implementation "org.springframework.boot:spring-boot-starter-web:$springboot_version"implementation &quo ...
MySQL(十四)-优化
参考文献
3万字总结,Mysql优化之精髓
高性能MySQL(第三版)
为什么要优化
系统的吞吐量瓶颈往往出现在数据库的访问速度上
随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢
数据是存放在磁盘上的,读写速度无法和内存相比
影响数据库性能的因素
SQL查询速度
大量的并发和超高的CPU使用率
大量的并发
数据库连接数被占满(max_connections默认100)
超高的CPU使用率:
因CPU资源耗尽而出现宕机
磁盘IO
磁盘IO性能突然下降(使用更快的磁盘设备)
其他大量消耗磁盘性能的计划任务(调整计划任务)
网卡流量
网卡IO被占满(1000Mb/8==100MB)
避免无法连接数据库
减少从服务器的数量
进行分级缓存
避免使用"select *"进行查询
分离业务网络和服务器网络
大表
记录行数巨大,单表超过千万行
表数据文件巨大,表数据文件超过10G
带来的问题
慢查询:很难在一定的时间内过滤出所需要的数据
对DDL的影响
建立索引需要很长时间
在MySQL版本<5.5建立 ...
Kotlin-遇到的问题
参考文献
Kotlin Collection VS Kotlin Sequence VS Java Stream
Kotlin项目中使用SpringBoot Aop切面报错Caused by: java.lang.IllegalArgumentException: Cannot subclass final class com.holelin.controller.XXXController
环境依赖
Gradle
Kotlin
SpringBoot 2.2.2.RELEASE
123456// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starterimplementation "org.springframework.boot:spring-boot-starter:$springboot_version"// https://mvnrepository.com/artifact/org.springframework.boot/spring ...
ElasticSearch(八)-运维
参考文献
Elasticsearch 最佳运维实践 - 总结(二)
cat命令
健康检查
/_cat/health?v
12epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent1628751491 06:58:11 local-cluster yellow 1 1 3 3 0 0 2 0 - 60.0%
节点分片数量查询
/_cat/allocation?v
查询每个节点上分配的分片(shard)的数量和每个分片(shard)所使用的硬盘容量
123shards disk.indices disk.used disk.avail disk.total dis ...
ElasticSearch(七)-路由
参考文献
Elasticsearch 最佳运维实践 - 总结(二)
路由
环境
1234567891011集群元信息Cluster-name:local-esNodes: node1 192.168.0.1 master node2 192.168.0.2 node3 192.168.0.3Indics: s0: shard0: primay: 192.168.0.1 rep:192.168.0.3
创建索引的流程
请求node3创建索引
node3请求转发给master节点
选择节点存放分片、副本,记录元信息
通知给参与存放索引分片、副本的节点从节点,创建分片、副本
参与节点向主节点反馈结果
等待时间到了,master向node3反馈结果信息,node3响应请求。
主节点将元信息广播给所有从节点。
索引文档流程
node2计算文档的路由值得到文档存放的分片(假定路由选定的是分片0)。
将文档转发给分片0的主分片节点 node1。
nod ...