- 博客(23)
- 收藏
- 关注
原创 Spring Data Jpa 一对多,级联更新,从一的一方更新多的数据
背景:Spring Data Jpa很方便,但很多时候,我们注意不到他内部的细节,就会导致乱用,从而导致一系列的报错。今天在工作中,发现了一个不明原理的问题,特此总结一下。一对多关系中,拿Class和Student举例子,我们通常会在Class的实体类里面维护一个StudentList,可以通过级联操作,新增Class和其对应的Student。假设:假设我们有一个班级1 Class cls1 = new Class();班级1里面有两个学生 Student s1 = ...
2021-03-29 18:01:27
3315
1
原创 Spring Data JPA 之 一对一,一对多,多对多 关系映射详细笔记
前言最近在用Spring Data Jpa ,发现好多东西都是知道个大概,但不知其细节,所以细节地方配置的错了,就会导致很多业务场景SQL报错。特做此笔记,以防以后跳同样的坑。一、@OneToOne关系映射JPA使用@OneToOne来标注一对一的关系。实体 People :用户。实体 Address:家庭住址。People 和 Address 是一对一的关系。这里用两种方式描述JPA的一对一关系:一种是通过外键的方式(一个实体通过外键关联到另一个实体的主键);另外一种是通过一张关联表来保
2020-11-12 11:15:17
474
原创 记录一次因为InetAddress.getLocalHost()缓慢导致系统Websocket连接慢的坑
问题描述系统在本地开发测试时Websocket连接很正常,都是秒连。但打包完部署到linux上运行,Websocket连接特别慢,平均要花10秒左右才能建立连接。框架结构整体采用前后端分离开发:前端:Vue.js+sockjs-client+Webstomp-client后端:Springboot+WebStomp关于前后端Websocket具体实现,可移步我的另一篇博客:过程排除了网络问题之后,在一步步的Debug之中,拨开了Bug的层层面纱。最终发现原来是Java原生方法InetAddr
2020-06-02 11:42:27
6982
10
原创 常见网络协议知识集 Http、WebSocket、Socket
首先看一下OSI七层模型与TCP/IP对比:应用层:各种应用层协议,如Http、WebSocket、FTP、SMTP等都属于应用层协议。 表示层:信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压缩 会话层:不同机器上的用户之间建立及管理会话 传输层:接受上一层的数据,在必要的时候把数据进行分割,并将这些数据提交给网络层,且保证这些数据段有效到达对端。TCP、UDP协议。...
2020-01-19 18:13:19
665
原创 WebSocket实战详解【Springboot+Vue+sockjs+webstomp】
WebScoket是什么?WebSocket是一种在单个TCP连接上进行全双工通信的协议。(来自百度百科) 也就是说,WebSocket使得浏览器和服务器可以主动发送给对方。同样是基于TCP连接,与以往的HTTP的协议不同,HTTP采用请求/响应模式,三次握手建立一次连接,只能由客户端发给服务端。而WebSocket只通过一次握手,建立一个持久的连接,客户端和服务端都可以主动发消息,更实时...
2020-01-19 17:51:04
2326
原创 Java8 流操作详细总结
一、流介绍到底什么是流呢?流,简短地定义是:从支持数据处理操作的源生成的元素序列。让我们一步步剖析这个定义。元素序列——就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序 值。因为集合是数据结构,所以它的主要目的是以特定的时间/空间复杂度存储和访问元 素(如ArrayList 与 LinkedList)。但流的目的在于表达计算,比如你前面见到的 filter、sorted...
2020-01-07 17:53:52
514
原创 Java8 lambda表达式使用局部变量final问题
lambda表达式在使用局部变量的问题在使用lambda表达式的时候,经常会遇到一个问题,那就是在lambda表达式内部修改局部变量的的值时候,编译器会报错,说变量类型必须为final才可以使用,也就是说不让我们修改,这是为什么呢?Lambda可以没有限制地捕获(也就是在其主体中引用)实例变量和静态变量。但局部变量必须显式声明为final, 或事实上是final。换句话说,Lambda表达式...
2020-01-07 12:23:52
9376
6
转载 Java 8 函数式接口Function、Consumer、Predicate、Supplier
https://blog.youkuaiyun.com/z834410038/article/details/77370785
2019-11-13 12:25:33
235
原创 深入浅出Java并发之CAS机制
在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。一、CAS机制介绍CAS:英文名Compare And Swap的缩写,意为比较并交换。CAS机制:当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试...
2019-10-11 16:24:22
581
1
原创 AtomicInteger中incrementAndGet与getAndIncrement的区别
在学习原子操作的时候,遇到了自增的方法,但发现AtomicInteger类中有两个类似的方法,研究了下,做下笔记记录。首先看下两个方法的源码:public final int getAndIncrement() { return unsafe.getAndAddInt(this, valueOffset, 1);}public final int incrementAnd...
2019-10-11 14:23:54
1466
原创 Java并发之ReentrantLock吐血总结
一、ReentrantLock重入锁基本概念ReentrantLock,重入锁,是JDK5中添加在并发包下的一个高性能的工具。顾名思义,ReentrantLock支持重入功能,即同一个线程在未释放锁的情况下可以重复获取锁,因此,重入的前提必须是同一个线程,后面会基于源码展示重入功能具体是如何实现的。本文内容将以介绍ReentrantLock的基本功能为主体,辅以相应源码的剖析,使读者深入记...
2019-10-11 12:44:40
557
原创 惊!一文看懂Java NIO读写文件
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。很多小伙伴可能和我一样,对于习惯了用IO来操作文件之后,对这个日渐流行的新东西会有不少的疑惑,那么阅读本文吧,和我一起打开NIO的大门,学习NIO操作文件。一、NIO与IO的区别下面有一个概要的区别图,图下面会有区别的描述。...
2019-09-06 14:49:29
1637
原创 【Guava】EventBus、AsyncEventBus详解及使用案例
EventBus顾名思义,事件总线,是一个轻量级的发布/订阅模式的应用模式。相比于MQ更加简洁,轻量,它可以在一个小系统模块内部使用。如果你也对EventBus感兴趣,或者想知道什么是EventBus,那就跟我一起来吧,后面会手把手教你使用EventBus,接下来就跟我一起走进EventBus吧。一、EventBus的介绍和使用场景EventBus是google的Guava库中...
2019-09-04 17:41:09
14197
16
原创 【Java设计模式】之观察者模式
对象间的联动----观察者模式(Observer Pattern)一、观察者模式概念红灯停,绿灯行,在生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的交通。当红灯亮起,来往的车辆都停止,当绿灯亮时,来往的车辆继续前行。在这个过程中,交通信号灯是观察目标,汽车是观察者,随着交通信号灯的变化,汽车根据反应作出不同的行为。一盏交通信号灯可以同时指挥很多辆汽车。如下图,信号灯的变化,可以引起汽...
2019-09-02 17:28:06
408
原创 Linux系统安装二进制包Mysql5.7详解
最近在Linux上安装了二进制包版本的Mysql5.7,特此记录一下。1、首先进入Mysql官方进行Mysql社区版的下载官网下载链接:https://dev.mysql.com/downloads/mysql/进入链接,选择历史版本,这里我们选择5.7版本的Mysql,选择压缩的tar版本,点击下载。2、选择安装位置:解压二进制包到/usr/local/mysql目录下面...
2019-09-02 11:30:23
628
原创 手把手带你入门quartz(含入门测试Case)
最近在做批量调度系统,用到了quartz定时调度的功能,因此学习了解了quartz,写一篇博客总结与分享。本文从引入jar包开始,手把手带你入门领略quartz的基础功能,涉及的代码可以直接复制到自己的ide中运行。本文大纲:1、什么是quartz2、怎么使用quartz以及Demo代码==========================================开始分割...
2019-08-28 16:31:14
669
3
原创 坑之Mysql数据库时间类型以及精度问题(多存了一秒)
最近项目中在做JWT登录的时候,根据当前时间做签名密钥,生成的Token,并且将当前时间也保存在了用户表中的last_login(最后登录时间),最后在做检验的时候,根据JWT中存的用户id,查询用户的最后一次登录时间,然后创建签名密钥,去调用校验Token的方法,结果老是校验不通过!debug了以后发现了问题,数据库存放的last_login,比生成Token是的那个时间多了一秒,密钥不对,...
2019-08-15 16:35:54
4144
2
原创 SpringBoot+JWT登录校验,以及JWT刷新机制
接上篇博客,继续讲解JWT的使用。本部分内容主要是SpringBoot项目中具体使用JWT的代码实现,包括了登录创建Token,后续请求验证Token,并且加入了JWT刷新机制等等。本文大纲:1.JWT的引入2.JWT工具类的实现3.登录申请Token4.请求验证Token5.JWT刷新机制的实现注意:本文注重使大家理解JWT如何在SpringBoot项目中集成和使...
2019-08-15 15:33:52
8084
40
原创 详细解剖什么是JWT以及内部创建的过程
最近根据项目的需要了解了JWT跨域登录认证,特此总结分享一下。JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文将分为两个部分,第一部分讲解JWT的原理和具体创建细节,帮助大家理解JWT的具体结构,和实现细节。第二部分是从SpringBoot项目中具体使用JWT的代码开始讲解,包括了登录创建Token,后续请求验证Token,设置有效期等等。本文大纲:1....
2019-08-14 16:47:32
833
转载 记录一下String.format()方法的使用
从 Java 5.0 开始,String类新增了一个强大的字符串格式化方法format()。这个方法到现在用的人还是不多,实在是一种浪费。本文带你快速过一遍这个方法的功能,将来你要用到格式化文本的时候,可能就不需要再借用第三方类库或自己去实现了。首先看一个简单例子:String formatted = String.format("%s今年%d岁。","小李",30);// "...
2019-08-13 18:29:32
533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人