自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 Seata学习笔记三:高可用实现之ZK

Seata的高可用模式是通过TC使用db模式共享全局事务会话信息,使用非file的seata支持的第三方注册中心和配置中心来共享全局配置的方式来实现的。Seata支持的第三方注册中心有nacos 、eureka、redis、zk、consul、etcd3、sofa、custom,支持的第三方配置中心有nacos 、apollo、zk、consul、etcd3、custom。seata官方主推的应该是nacos(毕竟是一家的),但是由于本人平常使用的注册中心一直是zk,因此首先考虑通过zk作为注册中心来实

2020-07-03 12:24:59 2678 3

原创 Seata学习中遇到的问题记录

1、1.2.0版本注册中心使用zk的时候,server启动报错:读取zk配置信息的时候异常。错误原因:序列化问题,由于使用seata自带的zk-config.sh脚本向zk写入配置信息的时候,采用的序列化方式相当于String.getBytes(),而框架读取配置的时候使用的是org.101tec包中的Zkclient客户端,反序列化使用的是该包下面的SerializableSerializer序列化类,使用的ObjectOutputStream进行反序列化,和序列化方式不一致。该问题在1.3.

2020-07-02 20:46:07 1020

原创 多数据源下事务支持

最近工作中遇到一个问题,由于某个业务明细表数据量越来越大,因此对该表进行了分表处理,考虑到其他业务未进行分表,因此重新配置了一套分表的数据源配置,这样项目中同时有两套数据源,两套事务管理器。项目开发完毕后同事在偶然的情况下发现部分数据不正常,经过问题追踪,发现是在某个事务中,同时涉及两个数据源,@Transactional启动事务的时候使用了默认的事务管理器,导致新加的分表数据源不被事务管理,异常出现时无法进行回滚。之前没有在项目中使用多个数据源,一直没发现这方面的问题,网上查找发现关于这个问题的文章挺多

2020-06-18 20:00:20 718

原创 Seata学习笔记二:Spring Boot + Dubbo下AT模式的尝试性使用

由于笔者日常的工作环境是Spring Boot + Dubbo + mysql,出于实用性考虑,首先尝试在此基础上实现Seata AT的接入。

2020-06-15 20:59:49 474

原创 Seata学习笔记一:初识Seata(持续更新中)

什么是Seata?官网定义:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。Seata三要素TC - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM - 事务管理器:定义全局事务的范围 ---- 开始全局事务、提交或回滚全局事务。RM - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动

2020-06-14 22:17:44 758

原创 Spring boot请求参数数据绑定重载set方法冲突异常原因解析

最近在工作中遇到了这样一个问题:一个后端接口,请求对象中有一个字段List<Integer> status,有两个地方调用该接口,其中一个传参status:[1,2],其中一个传参status:1。前一个接口调用没问题,后一个接口调用报错,因为类型不匹配。最开始,出于不需要前端页面同步修改考虑,直接对对象中的status字段进行了set方法重载,如下:然而实际运行中却报错了:本地测试的时候发现这个报错上面有两行warn告警信息:基本可以判断是jackson在数据绑定的

2020-05-25 16:45:01 1042

原创 代码重构,越早越好

还记得当年刚开始工作的时候,不熟悉设计模式,不了解阿里开发规范。参与的第一个正式项目是一款人脸实名认证APP,主要负责底层逻辑实现。没有模板,不考虑代理,从下单到支付,从第三方API调用到本地认证对比逻辑处理,全都在一个service,一个主方法中。随着业务的持续发展,各种附加逻辑的持续迭代,半年后这个service就迭代到了上千行代码,主方法好几百行代码。尴尬的是这个业务发展的还不...

2020-03-29 22:35:26 265

转载 【转】Mybatis-Configuration-详解

ConfigurationMyBatis的初始化会执行SqlSessionFactoryBuilder的中build()方法,build方法又会调用XMLConfigBuilder()的内部parse()方法进行加载配置,所以我们先看一下parse()的源码:publicConfiguration parse() {if(parsed) {throw newBuild...

2020-03-02 17:22:36 260

转载 【转】hystrix配置属性说明

目录目录配置详解Hystrix属性4种优先级Hystrix属性Command Properties 相关类 HystrixCommand执行相关 控制HystrixCommandrun 执行回退 控制HystrixCommandgetFallback 执行 对于线程池或者信号量执行策略都生效断路器 控制HystrixCircuitBreaker度量 主要度量HystrixComm...

2018-11-08 13:46:57 194

转载 【转】详解 Tomcat 的连接数与线程池

前言在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把...

2018-11-06 12:18:37 173

转载 【转】Tomcat线程池配置

1:配置executor属性打开/conf/server.xml文件,在Connector之前配置一个线程池:&lt;Executor name="tomcatThreadPool" namePrefix="tomcatThreadPool-" maxThreads="1000" maxIdleTime="300000" ...

2018-11-06 11:33:36 192

转载 【转】系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

PS:下面是性能测试的主要概念和计算公式,记录下:一.系统吞度量要素:  一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间        QPS(TPS):每秒钟request/事务 数量...

2018-10-12 10:09:52 212

转载 【转】Redis分布式锁的正确实现方式

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...

2018-08-17 11:44:45 220

转载 【转】javaweb面试总结(四、分布式事务、CAP原理和BASE思想、JDBC事务和JTA事务的区别、2PC与TCC区别)

CAP原理和BASE思想: http://www.jdon.com/37625分布式事务如何处理?解决方案有很多种!比如事务补偿机制:即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务。或者两阶段提交、三阶段提交:分布式事务服务(DTS) 支付宝的DTS实现!最近也看见一个tcc方案GitHub - changmingxie/tcc-transactio...

2018-08-03 16:17:57 507

原创 【问题记录3】SSH免密登录设置后不起作用

ssh免密登录设置,通过ssh-copy-id将本机公钥上传到目标机之后,使用ssh登录目标机仍需要密码。经检查,确认目标机对应目录及文件权限设置正确,公钥也已经写入目标机authorized_keys文件。/var/log/secure日志也没有明显异常。经过同事帮忙最终找到问题是:由于我本机有多个公私钥文件,免密配置时使用的是非id_rsa.pub,而ssh默认使用的是id_rsa文件,因此直...

2018-07-12 16:53:56 866

原创 jenkins使用过程中遇到的坑

安装的坑:1、jdk必须是openJDK,openJDK,openJDK!!!网上很多教程都强调必须要先安装jdk,但是很少人会明白的告诉是openJDK,sunJDK不可以。2、改端口号。不明白为什么都喜欢把默认端口设为8080,所以说,可以直接去改端口了,很少有在你安装jenkins的时候8080还没被使用的。...

2018-07-06 10:07:32 1804 2

原创 【问题记录2】spring boot redis @Cacheable报错InvalidDataAccessApiUsageException: EXECABORT Transaction disca

错误:org.springframework.dao.InvalidDataAccessApiUsageException: EXECABORT Transaction discarded because of previous errors.; nested exception is redis.clients.jedis.exceptions.JedisDataException: EXECA...

2018-06-21 21:05:43 2179

原创 【问题记录1】Spring Boot集成jpa+shiro报错could not initialize proxy - no Session解决方案

当spring boot单独集成jpa,开启hibernate的懒加载机制时没有问题,然而再集成shiro后运行过程中就会报错could not initialize proxy - no Session。针对此问题,在网上找到的比较合理的解决方案是增加openSessionInViewFilter,并保证此filter在shiroFilter前面。@Beanpublic SessionFact...

2018-06-20 19:53:32 1949 1

转载 过滤器、监听器与拦截器区别

拦截器Introspectoraop的一种实现依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用只能对controller请求进行拦截,对直接访问静态资源的请求则没办法进行拦截处理 过滤器Filter特殊的ServletFilter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后F...

2018-06-07 14:36:13 196

转载 Spring Boot常用注解

1.概述Spring Boot简化了Spring应用的开发,不需要繁琐的XML配置就能开发。 那Spring Boot是怎么实现自动配置的呢? 这就要用到Spring Boot中提供的许多注解:Spring提供XML配置、注解配置或Java配置来实现Bean的创建和注入Spring IoC(ApplicationContext)容器负责进行扫描Bean,进行Bean的初始化、配置和依赖管理本节介绍...

2018-06-07 14:35:25 162

原创 日常遇到的问题及解决方案记录

1、cannot set user id: Resource temporarily unavailable问题说明:用户的进程资源达到上限。解决方案:# vim /etc/security/limits.d/90-nproc.conf将 *    soft    nproc数量改为655352、java.util.prefs.FileSystemPreferences.syncWorld Cou...

2018-05-28 21:00:29 1274

转载 shell中if做比较

shell判断数组中是否包含某个元素:ary=(1 2 3)a=2if [[ "${ary[@]}" =~ "$a" ]] ; then    echo "a in ary"else    echo "a not in ary"fi判读字符串($str)是否包含另一个字符串($str1):方法1:if [  `echo $str | grep -e '$str1'`  ] ; then    ec...

2018-05-16 11:50:01 4409

转载 Spring Cloud Eureka 常用配置及说明

配置参数默认值说明服务注册中心配置  Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBeaneureka.server.enable-self-preservationfalse关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭...

2018-03-21 11:20:01 560

原创 ubuntu16(desktop)环境下Ethereum Wallet连接geth

前提:本文针对ubuntu16环境下,geth启动后钱包客户端启动报端口占用错误的用户,可以正常连接的用户请忽略。第一步:启动geth时指定rpc相关参数geth --datadir ./privateData --rpc --rpcapi "personal,admin,db,eth,net,web3"  init genesis.jsongeth --datadir ./privateData...

2018-03-16 14:55:44 946

转载 SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

一 简介(1)过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等关于过滤器的一些用法可以参考我写过的这些文

2018-01-24 11:59:36 179

转载 mysql常用函数汇总(分享)

一、数学函数ABS(x)   返回x的绝对值BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x)   返回大于x的最小整数值EXP(x)   返回值e(自然对数的底)的x次方FLOOR(x)   返回小于x的最大整数值GREATEST(x1,x2,...,xn)返回集合中最大的值LEAST(x1,x2,...,xn)      返

2018-01-17 15:36:03 223

转载 redis详解(一)-- 概述

首先,分布式缓存框架 可以 看成是nosql的一种(1)什么是redis?redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)(2)Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作

2018-01-17 13:14:44 141

转载 JAVA集合类汇总

一、集合与数组数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、层次关系如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口Collection接口是集合类的根接口,Java中没有提供这个接口的直

2018-01-16 18:52:29 172

转载 JVM调优总结 -Xms -Xmx -Xmn -Xss

堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355

2018-01-16 18:50:01 118

转载 常用限流方案的设计和实现

为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一。 限流即流量限制,或者高大上一点,叫做流量整形,限流的目的是在遇到流量高峰期或者流量突增(流量尖刺)时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。 其实,服务降级系统中的限流并没有我们想象的那么简单,第一,限流方

2018-01-16 18:47:55 317

转载 Java实现简单的RPC框架

一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。    RPC示意图如上图所示,假设Computer1在调用sayHi()方法,对于Comp

2018-01-15 15:12:12 205

转载 Java中:接口,抽象类,内部类

Java8中的接口public interface Output { //接口里定义的成员变量只能是常量 //默认使用public static final修饰 int MAX_CACHE_LINE = 50; //接口里定义的普通方法只能是public的抽象方法 void out(); void getData(String msg);

2018-01-15 11:04:00 178

转载 攻破JAVA NIO技术壁垒

现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章并不是很

2018-01-14 17:51:56 143

转载 Java与Netty实现高性能高并发

1. 背景1.1. 惊人的性能数据最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高

2018-01-14 17:50:59 5071 1

转载 Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来

2018-01-14 17:50:33 105

转载 dubbo与zookeeper的关系

Dubbo建议使用Zookeeper作为服务的注册中心。1.   Zookeeper的作用:        zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器

2018-01-14 17:49:29 447

转载 深入分析Spring 与 Spring MVC容器

v1 Spring MVC WEB配置  Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext,使得拥有web功能。那么,Spring MVC是如何在web环境中创建IoC容器呢?web环境中的IoC容器的结构又是什么结构呢?web环境中,Spring IoC容器是怎么启动呢?

2018-01-14 17:49:06 124

转载 Java分布式开发不得不知的Dubbo技术详细介绍

1 dubbox简介随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。垂直应用架构当访问量逐渐增大

2018-01-14 17:48:34 810

转载 浅谈一下缓存策略以及memcached 、redis区别

缓存策略三要素:缓存命中率   缓存更新策略  最大缓存容量。衡量一个缓存方案的好坏标准是:缓存命中率。缓存命中率越高,缓存方法设计的越好。 三者之间的关系为:当缓存到达最大的缓存容量时,会触发缓存更新策略,而缓存更新策略影响到了缓存命中率。可见,缓存方案的好坏依赖于缓存最大量的设置,以及缓存更新策略的选择。 对于经常变动的数据,不适合做缓存。对于静态、读写比高(一般10:1以上)

2018-01-12 15:19:21 162

转载 线程池原理(讲的非常棒)

在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?  在Java中可以通过线程池

2018-01-12 15:02:26 292

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除