Java EE

JPA使用乐观锁应对高并发

三世轮回 提交于 2020-07-27 11:43:37
高并发系统的挑战 在部署分布式系统时,我们通常把多个微服务部署在内网集群中,再用API网关聚合起来对外提供。为了做负载均衡,通常会对每个微服务都启动多个运行实例,通过注册中心去调用。 那么问题来了,因为有多个实例运行都是同一个应用,虽然微服务网关会把每一个请求只转发给一个实例,但当面对高并发时,但它们仍然可能同时操作同一个数据库表,这会不会引发什么问题呢? 悲观锁的问题 比如电商中常见的商品秒杀系统,在用户抢购商品过程中,会有大量并发请求,很可能同时读写一个包含商品剩余数量的表,这种一般要给数据库加锁,否则很容易出现商品超卖错卖的情况。 如果使用数据库自带的锁机制,也就是悲观锁,在写入的时候锁定数据库,其他修改请求到来时就必须等待锁释放,但这就使效率降下来了,而且高并发场景下可能有的请求一直抢不到锁,就会长时间卡在那导致请求失败,然后有大量重试,系统可能会发生连接数耗尽等异常。 乐观锁是个好东西 查阅资料发现乐观锁是个好东西,它是为数据库表增加一个标识数据版本的version字段来实现的,读取数据时把version字段一同读出,写入数据库时比对version字段就知道数据是否被更改过,如果version不相等就说明持有的是过期数据,不能写入,如果相等就可以写入,并把version加一。 乐观锁在写入数据库的时候,才会检查数据是否冲突,如果发现冲突了,就放弃写入,返回写入失败的信息

SpringBoot从入门到放弃之配置Spring-Data-JPA自动建表

六眼飞鱼酱① 提交于 2020-07-27 11:38:51
pom文件配置引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> 配置文件进行jpa配置 这里有两个配置需要说明一下; show_sql: true 在控制台显示jpa生成的sql format_sql: true 控制台显示生成的sql的时候进行格式化 ddl-auto: update 这种配置方式意思是没有表的时候新建表,有表的话就不会删除再新建,字段有更新的时候会自动更新表结构 实体创建 服务启动 可以看到咋子控台已经打印出建表的sql语句了 总结 虽然这种自动建表的方式很方便,但是不建议在项目中使用这种方式还是要慎重,最好自己手写sql去建表。 欢迎大家去 我的博客 瞅瞅,里面有更多关于测试实战的内容哦!! 来源: oschina 链接: https://my.oschina.net/u/4417652/blog/4318112

Spring Boot : 微服务应用监控 Spring Boot Actuator 详解

China☆狼群 提交于 2020-07-27 10:59:56
引言 在当前的微服务架构方式下,我们会有很多的服务部署在不同的机器上,相互是通过服务调用的方式进行交互,一个完整的业务流程中间会经过很多个微服务的处理和传递,那么,如何能知道每个服务的健康状况就显得尤为重要。 万幸的是 Spring Boot 为我们提供了监控模块 Spring Boot Actuator ,本篇文章将和大家一起探讨一些 Spring Boot Actuator 一些常见用法方便我们在日常的使用中对我们的微服务进行监控治理。 Spring Boot Actuator 帮我们实现了对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。 Actuator 的使用 2.1 工程依赖 使用 Spring Boot Actuator 需要加入如下依赖: org.springframework.boot spring-boot-starter-actuator COPY 注意: 因 Spring Boot Actuator 会暴露我们服务的详细信息,为了保障安全性,建议添加安全控制的相关依赖 spring-boot-starter-security ,这样,在访问应用监控端点时,都需要输入验证信息。所需依赖如下: org.springframework.boot spring-boot-starter-security COPY 2.2

在Java中创建泛型类型的实例?

可紊 提交于 2020-07-27 10:50:37
问题: Is it possible to create an instance of a generic type in Java? 是否可以在Java中创建泛型类型的实例? I'm thinking based on what I've seen that the answer is no ( due to type erasure ), but I'd be interested if anyone can see something I'm missing: 我根据我所看到的是,答案是思维 no ( 因为类型擦除 ),但我有兴趣,如果任何人都可以看到我丢失的东西: class SomeContainer<E> { E createContents() { return what??? } } EDIT: It turns out that Super Type Tokens could be used to resolve my issue, but it requires a lot of reflection-based code, as some of the answers below have indicated. 编辑:事实证明, 超级类型令牌 可以用来解决我的问题,但是它需要很多基于反射的代码,如下面的一些答案所示。 I'll leave this open

Java 后端开发学习路线

你离开我真会死。 提交于 2020-07-27 09:05:19
编程基础 Java语言 语言基础 基础语法 面向对象 接口 容器 异常 泛型 反射 注解 I/O 图形化(如Swing) JVM 类加载机制 字节码执行机制 jvm内存模型 GC垃圾回收 jvm性能监控与故障定位 jvm调优 并发/多线程 并发编程基础 线程池 锁 并发容器 原子类 juc并发工具类 数据结构和算法 数据结构 字符串 数组 链表 二叉树 堆、栈、队列 哈希 算法 查找 排序 贪心 分治 动态规划 回溯 计算机网络 ARP协议 IP/ICMP协议 TCP/UDP协议 DNS/HTTP/HTTPS协议 Session/Cookie 数据库/SQL SQL语句书写 SQL语句优化 事务以及隔离级别 索引 锁 操作系统 进程/线程 并发/锁 内存管理和调度 I/O原理 设计模式 单例 工厂 代理 策略 模板方法 观察者 适配器 责任链 建造者 开发工具 集成开发环境 Eclipse IDEA VSCode Linux系统 Linux常用命令 基本Shell脚本 代码管理工具 Git SVN 项目管理/构建工具 Maven Gradle 应用框架 后端 Spring家族 Spring IOC AOP SpringMVC SpringBoot 自动配置、开箱即用 整合Web 整合数据库(事务问题) 整合权限 Shiro SpringSecurity 整合各种中间件 缓存 MQ

easyui的menu接收后台集合,并且根据集合利用appendItem动态生成菜单项,判断菜单项的字数大于指定长度,则多余字符以。。。显示,并且悬浮提示

家住魔仙堡 提交于 2020-07-27 08:47:02
JSP: <a id="bb" href="javascript:void(0);" class="easyui-menubutton" data-options="menu:'#layout_north_stMenu222',iconCls:'icon-cologne-sign-out'" >导出</a> <div id="aaa" style="width: 100px; display: none;"> <div id='mdm0'>到清单 </div> </div> JS: var url="...发送post请求"; $.post(url,data,function(data){ if (data.rows && data.total>0){//每个菜单项是一个row if($('#bb').length > 0){ var menubutton = $($('#bb').menubutton('options').menu); var menu = menubutton.menu('findItem','到'+costTypeNameArr[index]);//增加父菜单项 for(var i=0;i<data.total;i++) { //循环增加子菜单项 menubutton.menu('appendItem',{ parent:menu.target,/

jvm字节码和类加载机制

限于喜欢 提交于 2020-07-27 08:41:49
Class类文件的结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(类和接口也可以用反射的方式通过类加载器直接生成) Class文件时一组以8位字节为基础单位的二进制流,各个数据都严格按照顺序紧凑排列在Class文件中,没有任何分隔符。 Class文件格式采用一种类似C语言结构体的伪结构存储数据,这种结构中只包含 无符号数 和 表 两种类型。 无符号数 无符号数属于基本数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节、8个字节的无符号数 无符号数可以用来描述数字、引用、数量值或者按照utf编码的字符串值。 表 表是由多个无符号整数或者其他表构成的符合数据类型,都由"_info"结尾。 表用于描述有层次关系的复合结构的数据,整个Class文件实际上就是一张表。 ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces

IDEA 整合 SSM 框架学习

♀尐吖头ヾ 提交于 2020-07-27 08:37:05
认识 Spring 框架 更多详情请点击这里: 这里 Spring 框架是 Java 应用最广的框架,它的 成功来源于理念,而不是技术本身 ,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程) 。 什么是 Spring: Spring 是一个 轻量级的 DI / IoC 和 AOP 容器的开源框架 ,来源于 Rod Johnson 在其著作 《Expert one on one J2EE design and development》 中阐述的部分理念和原型衍生而来。 Spring 提倡以 “最少侵入” 的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring 适用范围:任何 Java 应用 Spring 的根本使命:简化 Java 开发 尽管 J2EE 能够赶上 Spring 的步伐, 但 Spring 并没有停止前进, Spring 继续在其他领域发展,而 J2EE 则刚刚开始涉及这些领域,或者还没有完全开始在这些领域的创新。 移动开发、社交 API 集成、NoSQL 数据库、云计算以及大数据 都是 Spring 正在涉足和创新的领域。Spring 的前景依然会很美好。 Spring 的优势 低侵入 / 低耦合 (降低组件之间的耦合度

SpringMVC之文件上传

ぃ、小莉子 提交于 2020-07-27 08:34:01
一、环境搭建 1、新建项目 (1)在” main”目录下新建” java”与” resources”目录 (2)将” java”设置为”Sources Root” (3)将” resources”设置为”Resources Root” (4)在”java”目录下新建”StudyProject.Controller”包 (5)在”StudyProject.Controller”包下新建”TestController”类 (6)在”resources”目录下新建”Spring.xml” (7)在”WEB-INF”目录下新建文件夹”Pages” (8)在“Pages”目录下新建”success.jsp” 2、整体框架 3、TestController类和success.jsp (1)TestController类 原代码 1 package StudyProject.Controller; 2 3 public class TestController { 4 } 编写前端控制器及路径 修改后 1 package StudyProject.Controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation

IDEA新手使用教程

谁说胖子不能爱 提交于 2020-07-27 08:32:34
一、IDEA IDEA 全称IntelliJ IDEA,是 java语言 开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、 J2EE 支持、 Ant 、 JUnit 、 CVS 整合、代码审查、 创新的 GUI设计 等方面的功能可以说是超常的。IDEA是JetBrains公司的产品。 作为一名合格的程序猿,对于开发工具的选择也是很重要的,虽然我们常用 eclipse、myeclipse等开发工具就能满足目前的开发需求,毕竟每个公司的要求不一样,对于IDEA,建议大家可以试着去使用,不论从哪方面都优于上面两种开发工具,唯一一点可能IDEA对电脑配置是由要求的,毕竟大公司都基本上在使用IDEA,不多说了,我们一步一步来,首先来说IDEA的下载和安装过程。 二、IDEA 的下载及安装 打开IDEA的官网,如:http://www.jetbrains.com/ 然后到了主界面,点击下载如图: 图1 我们这里下载zip的,将它下载到你要保存的目录下,其次解压。注意:(目录不能要中文和空格),我这里将它解压到F盘IDEA文件下: 图2 上图为解压后的IDEA文件夹,然后我们打开bin文件夹: 图3 我们可以看到2个IEDA应用程序,红色箭头指的是默认为32位的,这里给了我们选择,若你的系统为32位则选它,这里我用的是64位的