Java
文章平均质量分 70
指尖凉
生活明朗,万物可爱,人间值得,未来可期。
展开
-
Seata AT模式源码解析三(AT模式工作机制)
从一个微服务示例开始,案例采用Seata官方提供的Demo。用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:● 仓储服务:对给定的商品扣除仓储数量。● 订单服务:根据采购需求创建订单。● 帐户服务:从用户帐户中扣除余额。架构图订单服务账户服务仓储服务主业务逻辑这里主要的就是在主业务方法上添加上全局事务注解@GlobalTransactional,代表从这里开始开启全局事务,该方法里的调用不管是本地调用还是远程调用,都在全局事务管辖范围内。执行的流程如下:上一篇说到,当调用被原创 2023-05-26 15:03:34 · 694 阅读 · 1 评论 -
Seata AT模式源码解析二(Seata Client端启动流程)
由于我们一般都是在springboot中使用的,而与springboot集成的我们一般就先看starter的spring.factories文件,看看它的自动装配这里面主要关注SeataAutoConfiguration和SeataDataSourceAutoConfiguration。该配置类要生效的条件是seata.enabled值为true,该值默认就是为true,所以该配置类默认是生效的。原创 2023-05-26 15:02:41 · 893 阅读 · 0 评论 -
Seata AT模式源码解析一(Seata Server端启动流程)
在DefaultCoordinator里还创建了一个DefaultCore,该类是默认的 TC 事务操作实现,DefaultCoordinator的开启、提交、回滚全局事务,注册、提交、回滚分支事务都是委托给这个类。主要就是创建了5个定时任务,主要用于事务的重试机制,因为分布式环境的不稳定性会造成事务处于中间状态,所以要通过不断的重试机制来实现事务的最终一致性。在阅读源码的时候,有些源码是要细看的,但是有些源码可以大致猜测一下它的作用,就直接略过去了,抓住真正的重点去看。原创 2023-05-26 14:55:18 · 1360 阅读 · 0 评论 -
springboot使用过滤器对请求参数进行处理
前段时间对项目进行改造,需要实现对请求参数进行解密,再传输到控制层。参考了网上的一些文章,基本都是通过过滤器和实现RequestBodyAdvice接口进行处理。结合自己的项目要求,实现RequestBodyAdvice接口只能对参数在请求体中(@RequestBody)才生效,而项目中需要对get和post请求都进行处理,所以最后决定使用过滤器来实现。这里记录下代码实现,方便以后遇到相似的功能就不需要再去网上搜了。首先需要继承HttpServletRequestWrapper类来自定义一个Request原创 2021-08-24 14:38:38 · 5932 阅读 · 6 评论 -
Spring Cloud Gateway Hystrix fallback获取异常信息
Spring Cloud Gateway熔断降级获取详细异常信息原创 2020-04-24 13:54:15 · 3540 阅读 · 3 评论 -
Java Bean、Json、Map和List互转方式汇总
各种json转换操作原创 2019-11-14 14:11:28 · 1509 阅读 · 0 评论 -
Spring Cloud Zuul设置动态路由规则
最近项目中有一个需求:由于有多个服务需要接入系统,并且后续会越来越多服务接入,此时外部系统调用这些服务会比较麻烦,不同的端口,不同的路径,直接调用还有暴露接口的具体地址,所以不好管理。此时就想到了将对这些服务的请求统一通过网关转发,统一生成一个路由前缀,并且转发前统一在网关进行鉴权。当这些特殊的服务注册到eureka时,动态的生成服务的路由规则,避免在配置文件中手动配置。首先,根据别人的教程,创...原创 2019-10-31 13:59:02 · 1246 阅读 · 0 评论 -
Ribbon、Feign、Hystrix和Zuul超时重试设置(二)
Ribbon、Feign、Hystrix和Zuul超时重试设置(二)原创 2019-10-30 17:05:49 · 707 阅读 · 0 评论 -
记一次centos7上将jar包注册为服务启动
将java程序打成jar包在pom文件中加入以下代码:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-mave...原创 2019-08-30 23:25:58 · 537 阅读 · 0 评论 -
记一次在centos7上离线安装JDK1.8
在这里记录一下主要是方便以后安装的时候可以直接到这里查看安装过程,省得以后安装的时候上网搜。在安装jdk之前,需要将系统自带的openjdk卸载了先查看openjdk:rpm -qa | grep openjdk之后通过rpm -e --nodeps命令将上面所列出来的依次删除然后安装oraclejdk先解压tar -zxvf jdk-8u221-linux-x64.tar.gz...原创 2019-08-24 19:04:59 · 462 阅读 · 0 评论 -
JVM内存分配与回收策略分析
JVM内存分配与回收策略原创 2019-08-11 11:31:21 · 290 阅读 · 0 评论 -
Java类初始化和对象实例化顺序
这里只考虑在一个类的情况下类初始化和对象实例化的顺序,不考虑有父类的情况下。看下面这段代码:package com.huang.jvm;/** * @author hsz */public class Demo { int a = print(3); public Demo() { System.out.println("构造方法"); }...原创 2019-08-03 10:27:32 · 899 阅读 · 0 评论 -
Java非法向前引用变量
转载自:https://blog.csdn.net/xdugucc/article/details/78239920在学习《深入理解java虚拟机》一书中,关于类的初始化一章中提到了一句:静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块中可以赋值,但是不能访问。并给出一个示例:public class MyClass { static { i =...转载 2019-07-27 11:30:25 · 1570 阅读 · 2 评论 -
JVM垃圾回收算法总结
JVM垃圾回收算法总结原创 2019-08-01 09:12:41 · 181 阅读 · 0 评论 -
Java类加载过程简述
JVM运行流程原创 2019-07-24 22:56:19 · 876 阅读 · 2 评论 -
解决org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade
今天学hibernate多对一要删除多的一方时,我在两个持久类中都设了cascade=CascadeType.ALL,由于只想要删除一条记录,而与之相关联的其他记录不想被删除,所以我用了以下方法(多个Person对应一个Address):Person p1 = (Person)session.get(Person.class, 3);p1.setAddress(null);session.原创 2017-08-01 10:00:52 · 1035 阅读 · 1 评论 -
java 常用集合list与Set、Map区别及适用场景总结
转载于:http://blog.csdn.net/qq_22118507/article/details/51576319 list与Set、Map区别及适用场景 1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放转载 2017-09-27 22:12:59 · 181 阅读 · 0 评论 -
将服务端的一个JSON格式的字符串输出给客户端js,客户端接收到的字符串里双引号被转义成“ "”的解决方案
将服务端的一个JSON格式的字符串输出给客户端js,客户端接收到的字符串里双引号被转义成“ "”了,导致将json字符串转换成json对象的时候报错。如服务器端的字符串原为'{"姓名":"张三","性别":"男"}'当用js接收时变成了var str = "{"姓名":"张三","性别":"男"}"。原创 2017-12-25 16:13:34 · 6544 阅读 · 1 评论 -
Java在Window和Linux上获取本机IP
Java获取本机IP地址,我原本是通过InetAddress.getLocalHost().getHostAddress()来获取,这句代码在window上是可以正确获取到本机IP,但当我将代码部署到Linux上时,就不行了,只会返回127.0.0.1。我上网搜索了一下,大部分人IP就是这样获取,当然也搜到了一些在Linux上可以正确获取IP的方法,java.net.NetworkInterfac...原创 2019-01-17 17:15:18 · 2616 阅读 · 0 评论 -
SpringCloud提取公共配置
在开发微服务项目时,通常会有很多服务,此时会用配置中心来管理这些服务的配置,但有些服务可能会有相同的配置,比如数据源配置,eureka server注册中心地址配置,actuator开放端口配置等,很多的服务都需要,如果每个服务都写一份这样相同的配置,服务一多,也挺麻烦的,并且如果要换一个数据库或注册中心,每个服务都得改,很麻烦,所以就需要将这些公共的配置提取出来,放到公共的配置文件中,而这些...原创 2019-02-01 15:34:06 · 3910 阅读 · 0 评论 -
如何保证RabbitMQ全链路数据100%不丢失
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2019-02-19 16:05:15 · 7234 阅读 · 12 评论 -
Ribbon、Feign、Hystrix和Zuul超时重试设置(一)
Ribbon、Feign、Hystrix和Zuul超时设置原创 2019-04-25 09:06:37 · 2952 阅读 · 0 评论 -
关于Java中volatile关键字可见性的补充说明
本文不是一篇讲解volatile的技术文,只是在学习volatile过程中遇到的问题的记录以及自己的理解,要想全面的了解volatile关键字,可以去看其他大佬的技术博客,我自己就是个菜鸟。原创 2019-05-05 16:03:11 · 268 阅读 · 0 评论 -
Java8对List<Integer>的求和
想要用流对List<<>>进行求和,但查找完资料都是对List中Object中的某个字段进行求和,就像这样:long sum = list.stream().mapToLong(User::getAge).sum();而我list中本身存的就是基本类型的数字,并不适用。后来在IBM开发者社区中找答案:long sum = list.stream().reduce(I...原创 2019-05-06 17:07:53 · 43837 阅读 · 9 评论 -
RabbitMQ集成Webflux消费消息
RabbitMQ集成Webflux来消费消息原创 2019-06-08 09:31:58 · 1460 阅读 · 1 评论 -
Java通过POI将表数据导出为Excel
前段时间项目需要将用户操作日志表导出为Excel,上网搜了几篇文章参考,最终实现了。这里记录下代码,避免以后实现一样的功能时再上网去搜。导入以下两个依赖:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <...原创 2019-07-04 10:21:39 · 525 阅读 · 0 评论 -
JavaWeb实现过滤器验证登录
**今天正好学到过滤器,就想着用博客记录下来,方便以后查找,也供大家参考,由于刚学,所以不足之处也请大家见谅。**1、写一个类实现Filter接口:public class Login implements Filter{ public void init(FilterConfig config) throws ServletException{ } public void原创 2017-07-09 19:56:30 · 2997 阅读 · 0 评论