hibernate

JVM GC耗时频频升高,我来教你排查

好久不见. 提交于 2020-12-22 00:13:32
1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中

由Spring应用的瑕疵谈谈DDD的概念与应用(二)

。_饼干妹妹 提交于 2020-12-21 22:16:57
在 上一篇 文章中,通过Spring Web应用的瑕疵引出改善的措施,我们讲解了领域驱动开发的相关概念和设计策略。本文主要讲解领域模型的几种类型和DDD的简单实践案例。 架构风格 在《实现领域驱动设计》一书中提到了几种架构风格:六边形架构、REST架构、CQRS 和事件驱动等。在实际使用中,落地的架构并非是纯粹其中的一种,而很有可能户将上述几种架构风格结合起来实现。 分层架构 分层架构的一个重要原则是每层只能与位于其下方的层发生耦合。分层架构可以简单分为两种,即严格分层架构和松散分层架构。在严格分层架构中,某层只能与位于其直接下方的层发生耦合,而在松散分层架构中,则允许某层与它的任意下方层发生耦合。DDD分层架构中比较经典的三种模式:四层架构、五层架构和六边形架构。 四层架构 Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的四层架构模式: User Interface为用户界面层(或表示层),负责向用户显示信息和解释用户命令。这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人。 Application为应用层,定义软件要完成的任务,并且指挥表达领域概念的对象来解决问题。这一层所负责的工作对业务来说意义重大,也是与其它系统的应用层进行交互的必要渠道。应用层要尽量简单,不包含业务规则或者知识,而只为下一层中的领域对象协调任务,分配工作

了解的CAP和BASE等理论

ぐ巨炮叔叔 提交于 2020-12-21 03:03:40
CAP,BASE和最终一致性是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储的理论依据。这个是一切的源头。 几个名词解释: 网络分区:俗称“脑裂”。当网络发生异常情况,导致分布式系统中部分节点之间的网络延时不断变大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信,而另一些节点则不能。当网络分区出现时,分布式系统会出现局部小集群。 三态:分布式系统的每一次请求和响应包含:成功,失败,超时三种状态。 CAP CAP理论,指的是在一个分布式系统中,不可能同时满足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中的两项。 1、一致性: 指数据在多个副本之间是否能够保持一致的特性。当执行数据更新操作后,仍然剋保证系统数据处于一致的状态。 2、可用性: 系统提供的服务必须一直处于可用的状态。对于用户的每一个操作请求总是能够在“有限的时间内”返回结果。这个有限时间是系统设计之初就指定好的系统运行指标。返回的结果指的是系统返回用户的一个正常响应结果,而不是“out ot memory error”之类的系统错误信息。 3、分区容错性: 分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障

Spring RestController 请求参数详解

久未见 提交于 2020-12-20 03:39:43
Spring RestController 请求参数详解 引用作者jpfss 在阅读之前,最好先了解http请求的get,post,以及各种head头类型,请求参数类型。 无参数,设置RestController请求路径 查询字符串参数,可选和必选参数 json参数,RestController用实体类型接受 路径参数 body参数 文件流参数 1 无参数,设置RestController请求路径 下面是一个例子,例子无请求参数,通过@RequestMapping设置了请求的路由路径和请求方法。路由路由由类的mapping和方法的mapping组成,在后面的例子中,我就不再写出RestApiRequestDemoController类的mapping了。记住,url里面有个demo在前面。 @RestController @RequestMapping("/demo") public class RestApiRequestDemoController { ///方法说明: 普通查询 ///示例请求:http://localhost:8091/demo/list @RequestMapping(value="/searchList",method = RequestMethod.POST) @ResponseBody public List<UserModel>

讲真!这些攻击手段你知道吗

你说的曾经没有我的故事 提交于 2020-12-19 15:46:52
世界上最快的捷径,就是脚踏实地,本文已收录【架构技术专栏】关注这个喜欢分享的地方。 网站安全 从从互联网发展开始,各种网络安全问题也就伴随而生。 近些年来有很多网站遭到攻击,如新浪微博遭XSS攻击,以CSDN为代表的多个网站泄露用户密码和个人信息。 特别是后者,因为影响人群广泛,部分受影响网站涉及用户实体资产和交易安全,一时成为舆论焦点。 那么新浪微博是如何被攻击的?CSDN的密码为何会泄露?如何防护网站免遭攻击,保护好用户的敏感信息呢? 常见的攻击与防御 XSS攻击,它和SQL注入攻击构成网站应用攻击最主要的两种手段,全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的Web应用还包括CSRF、Session劫持等手段。 XSS攻击 XSS攻击又称CSS,全称Cross Site Script (跨站脚本攻击),其原理就是攻击者像有XSS漏洞的网站注入恶意HTML脚本,在用户浏览网页时,这段恶意的HTML 脚本会自动执行,从而达到攻击的目的。 常见的XSS攻击类型: 反射型,通过在请求地址上加入恶意的HTML代码 dom型 ,通过一些API向网站注入恶意HTML 持久型,将恶意代码内容发给服务器,服务器没过滤就存储到数据库中了,下次再请求这个页面时就会从数据库中读取出恶意代码拼接到页面HTML上 1、反射型XSS攻击 攻击步骤: 1

Hibernate Bug

这一生的挚爱 提交于 2020-12-18 07:56:22
Hibernate对于用原生的Sql查询有bug,当使用sql语句查询时,要注意进行标量查询或者是实体查询(SQLQuery)query.addEntity(Entity.Class) ,但是有时候即使是配置了实体的id,也即表的主键,也会发生错误Column notFound ‘’id“ ;所以不建议使用原生sql语句在hibernate中; hql查询单表部分字段: 在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况: 1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充。 2.只查询一个字段,默认情况下,list中封装的是Object对象。 3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。 对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。比较简单的解决方法是: 在hql中使用 select new 包名.类名(属性1,属性2……) from实体类,同时 在实体类中添加带参的构造方法 ,参数的个数和顺序与(属性1,属性2……)保持一致,这样我们得到的list中存放的依然是实体类的 对象,所查询到的属性得到了填充,使用起来更为方便。 附hql查询多表语句: String hql

springboot集成Spring Data JPA数据查询

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-18 03:16:06
1、JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术 Spring data jpa是在JPA规范下提供了Repository层的实现。虽然ORM框架都实现了JPA规范,但是在不同的ORM框架之间切换仍然需要编写不同的代码,而通过使用Spring data jpa能够方便大家在不同的ORM框架之间进行切换而不要更改代码,使代码看上去更加优雅,并且spring data jpa 对Repository层封装的很好,也省去了不少的麻烦。 2、springboot集成   pom依赖: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-data-jpa </ artifactId > </ dependency >   配置文件添加: #jpa配置 jpa: database: mysql show-sql: true hibernate: ddl-auto: update properties: hibernate.format_sql: true

JPA02 -- Spring Data JPA01

若如初见. 提交于 2020-12-16 21:12:11
关于JPA总共写了三篇内容,下面附上链接: JPA01:https://www.cnblogs.com/buwei/p/9979794.html JPA02:https://www.cnblogs.com/buwei/p/9985287.html JPA03:https://www.cnblogs.com/buwei/p/9985941.html 一、Spring Data JPA的概述   1.1 Spring Data JPA概述   Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架。他提供了包括增删改查在内的常用功能,且易于扩展。   Spring Data JPA让我们解脱了DAO的操作,基本上所有的CRUD都可以依赖于它来实现,在试驾的工程中,推荐使用Spring Data JPA+ORM(如:Hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦。   1.2 Spring Data JPA的特性   使用Spring Data JPA,我们的DAO层只需要写接口,就自动具有了增删改查、分页查询等方法。   1.3 Spring Data JPA与JPA和Hibernate之间的关系   JPA是一套规范,内部是由接口和抽象内组成

面试官还敢问你JVM调优问题,把这篇文章甩给他!

淺唱寂寞╮ 提交于 2020-12-16 16:55:32
目录 JVM调优 概念 基本垃圾回收算法 垃圾回收面临的问题 分代垃圾回收详述1 分代垃圾回收详述2 典型配置举例1 典型配置举例2 新一代的垃圾回收算法 调优方法 反思 一、JVM调优的一些概念 数据类型 Java虚拟机中,数据类型可以分为两类: 基本类型 和 引用类型 。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括: 类类型 , 接口类型 和 数组 。 堆与栈 堆和栈是程序运行的关键,很有必要把他们的关系说清楚。 Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中, 一个空Object对象的大小是8byte ,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为: 4byte+8byte 。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息

022-抽象类与抽象方法

倾然丶 夕夏残阳落幕 提交于 2020-12-16 10:37:19
声明:我的所有文章,都是对网上教学视频的整理,包括狂神说、尚硅谷、黑马程序员等等,用来作为参考资料,无任何商业使用,请广大网友参考,不喜勿喷,谢谢。(注意,由于网站的原因,有些代码字符可能会出现问题,建议大家阅读代码时,最好和下面的图片对应来看) 一、抽象类的引入 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。 二、抽象类与抽象方法的定义 1、用abstract关键字来修饰一个类,这个类叫做抽象类 2、用abstract来修饰一个方法,该方法叫做抽象方法,该方法只有方法的声明,没有方法的实现,以分号结束,如:public abstract void talk(); 3、含有抽象方法的类必须被声明为抽象类 4、抽象类不能被实例化,抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体;若没有重写全部的抽象方法,仍为抽象类。 5、不能用abstract修饰变量、代码块、构造器 6、不能用abstract修饰私有方法、静态方法、final的方法、final的类 三、示例 四、抽象类应用 抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。 例如:在一个航运公司系统中