自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 资源 (9)
  • 收藏
  • 关注

原创 springboot(4.6)springboot框架下开发类似Feign实现外部服务的访问

概述虽然当前很多项目都以微服务为主,但也会存在调用外部接口的情况,如公司项目调用外部公司提供的接口。这种情况下,一般我们会使用httpclient进行远程接口调用,但能不能对httpclient进行封装,像Feign那样访问远程外部接口呢?本文就是模拟Feign,实现远程外部接口的访问。本文和前面的《springboot(4.4)集成mybatis原理分析》有些类似,可以一起进行阅读参考,但本文功能更完善,可以直接复制代码进行修改后用于生产。feignclient修饰的接口如下:@FeignClie

2020-12-05 23:20:10 928

原创 springboot(4.5)springcloud远程调用异常统一处理

概述在目前微服务流行的年代,稍微大点的项目都会使用微服务架构模式。本文主要记录springcloud远程调用返回结果的异常统一处理。应用篇假设微服务的返回结果有如下封装:@Datapublic class ApiResponse<T> { /** * 返回码 0 为成功 其他为异常 */ private int code; /** * 异常提示信息 */ private String message; /*

2020-12-05 23:04:38 2104

原创 springboot(4.4)集成mybatis原理分析

在springboot集成mybatis项目中,我们只需要在启动类上加上@MapperScan注解,让spring在启动时去扫描某路径下的所有mapper接口,然后就能实现mapper接口对应的增删改查功能,但mapper类,只是一个接口,我们并未为其写具体的实现,那么它是怎么被实例化的呢?本文就从源码的角度来解析这一过程。通过本文的学习,我们还能举一反三的让我们以后写自己的功能时,更好的和spring进行整合。理论上而言,应该是这样的:@MapperScan注解告诉spring去扫描路径下的所有m

2020-08-15 23:16:42 325

原创 springboot(4.3)自动装配

springboot自动装配springboot是一个以spring framework为基础,用于快速构建应用程序的框架。也就是说springboot拥有springframework的所有功能,并自己还提供了一系列用于简化配置、自动装配等功能。其中,自动装配个人认为是springboot框架的核心,本文主要学习和总结下springboot的自动装配功能和自定义starter。利用springboot搭建一个spring+mybatis的web项目配置pom.xml文件<projec

2020-07-26 15:51:55 372

原创 springboot(4.2) springAOP

spring AOPspring家族包括很多产品和组件,比如spring-framework、springboot、springcloud等等,其中spring-framework是springboot的基础,而springboot又是springcloud的基础,本文就spring-framework5.x相关知识进行学习。本文主要以spring注解的方式进行学习和总结。在spring-framework中,最为核心的组件为IOC和AOP,本文就AOP的基础知识进行学习和总结。文章下面所谓的sprin

2020-07-26 15:38:37 253

原创 springboot(4.1) springIOC

springIOC基础知识spring家族包括很多产品和组件,比如spring-framework、springboot、springcloud等等,其中spring-framework是springboot的基础,而springboot又是springcloud的基础,本文就spring-framework5.x相关知识进行学习。本文主要以spring注解的方式进行学习和总结。在spring-framework中,最为核心的组件为IOC和AOP,本文就IOC的基础知识进行学习和总结。文章下面所谓的sp

2020-07-26 15:04:25 291

原创 flink实战(二)flink API方式关联hbase维度数据处理

概述接上一篇flink-sql关联hbase维度数据处理。这次我们使用API的方式来实现。并解决上次提到的问题:订单支付成功后,可以退款,退款完成后订单状态会变成失效,那么统计结果中不应该包含退款成功后相关数据,这次的代码是在上一篇总结的基础上进行的改造,因此只给出了新增的代码逻辑。实现代码//main方法 //3.2 直接入库Hbase库的维度数据和需要进行实时计算的数据这里分别写了一个,因为还是有些不同的 //3.2.1 维度数据的处理 JobDe

2020-07-04 12:09:12 1363

原创 flink实战(一) flink-sql关联hbase维度数据处理

概述最近项目中用到flink进行实时计算,流程为从kafka读取数据,如果是维度数据,则插入到hbase中,如果是需要实时计算的数据,则进行实时计算,并将计算结果保存到MySQL中。在实时计算过程中,可能会用到hbase中的维度数据,为了开发的效率,使用flink-sql的方式实现。flink-sql是在flink流式计算的基础上进行了高度抽象,使开发过程更简单,更有效率,但要理解sql执行背后的原理还是需要仔细学习flink流式计算的相关内容。本文主要以flink-sql实现相关功能。假设需求如

2020-07-04 11:54:14 4928 6

原创 springboot集成mybatis环境搭建

maven依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.5.RELEASE</version>

2020-07-04 11:46:36 707

原创 springboot整合Shiro

Shiro与springboot整合概述Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、加密和会话管理,使用shiro可以非常方便的完成项目的权限管理模块开发三个核心组件:Subject:当前操作用户,可以是登录用户,也可以是第三方访问程序SecurityManager:管理所有用户的安全操作,包括执行身份验证、授权、加密和会话管理Realms:当对用户执行认证和授权验证时,Shiro会从应用配置的Realm中查找用户及其权限信息,本质上是一个实现了查询用户权限

2020-06-21 15:54:31 604

原创 flink学习笔记5-flink状态和检查点

flink状态要实现有且只有一次或者至少一次处理语义,需要保存相关的中间状态数据,在故障恢复时进行还原故障前系统的运行状态。在flink中,定义了操作状态和分组状态两种状态,且定义了检查点机制来定时触发检查点,触发检查点会将flink状态保存到statebackends中,所谓statebackends就是定义触发检查点后,将状态数据保存到哪里,默认是保存到jobmanager的内存中。状态分类操作状态(operator state):只能运行在非keyedstream流中,如kafka作为sour

2020-06-06 16:06:11 1408

原创 flink学习笔记4-flink架构,任务、子任务划分

flink架构Job Managers(master):作业管理器,负责任务安排、协调检查点、协调故障恢复等Task Managers(worker):任务管理器,接收master的任务调度,并在本地执行相关任务在worker节点上,会启动一个TaskManagersRunner的进程,来接收master的任务调度一个worker包含至少一个任务槽,每个任务槽表示worker内存资源的固定子集。例如,具有三个槽的worker会将其托管内存的1/3专用于每个槽。分配资源意味着子任务不会与其他作业

2020-06-06 15:52:52 2478 1

原创 flink学习笔记3-flink窗口

flink窗口概述将无界数据流划分成一个个的有界流,并在有界流中进行计算flink时间分类处理时间Processing time:当前算子获取到流中数据的时间戳,事件时间Event time: 最原始数据中自身携带的时间,如从数据库读取数据,而数据库表中有一个字段为updatetime,那么这个字段就可以作为事件时间获取时间Ingestion time: flink从source中获取数据的时间戳flink设置时间特征(全局设置)时间特征的默认值为处理时间env.setStreamTi

2020-06-06 15:45:32 536 1

原创 flink学习笔记2-flink操作算子介绍

操作算子:将一个或多个DataStream转换为新的DataStream的程序单元就叫操作算子。 程序可以将多种转换组合成复杂的数据流拓扑。基础算子1. Map算子DataStream → DataStream,从源流中获取一个数据,经过转换输出一个数据到目标流中 即输入一个元素 输出一个元素public class Test { /** * Map: DataStream → DataStream */ public static void Map() thr

2020-06-06 15:35:41 811

原创 flink学习笔记1-flink概述,kafka数据源以及MySQL作为程序输出

概述flink官网的第一个程序:计算单词出现的次数public class WindowWordCount { public static void main(String[] args) throws Exception { //创建flink流执行的环境,获取环境对象 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

2020-06-06 15:17:38 1010

原创 LCN分布式事务学习0-分布式事务理论基础

1. 事务概述1.1 事务的定义将一个活动涉及到的所有操作纳入到一个不可分割的执行单元,只要其中任一操作执行失败,都将导致整个执行单元回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。事务具备ACID的特性,即原子性、一致性、隔离性和持久性。1.2 事务分类一般而言,常将事务分为如下几种类型的事务:本地事务 垮库事务 分...

2019-10-31 20:09:23 250

原创 LCN分布式事务学习3-服务端(TM)代码逻辑梳理

1. TM启动流程TM是一个springboot项目,在springboot启动时,会通过一个applicationRunner启动TM服务,即启动一个基于netty网络框架的服务端。NettyRpcServerChannelInitializer类的源码如下:这里重点关注下RpcAnswerHandler处理器。RpcAnswer是一个接口,有两个实现:Serve...

2019-10-30 13:52:43 654

原创 LCN分布式事务学习2-客户端(TC)执行流程介绍

1. LCN架构介绍注:本节内容来自LCN官网。LCN由两大模块组成,TC和TM,TC作为模块的依赖框架,提供TX-LCN的标准支持,TM作为分布式事务的控制方。事务发起方或者参与方都由TC端来控制。核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 加入事务组 添加事务组是指...

2019-10-29 17:57:18 1007 1

原创 netty学习07-netty在LCN分布式事务框架中的应用

1. LCN简介LCN是一个分布式事务框架,底层的网络框架使用的就是netty。LCN分为客户端(TC)和服务器端(TM),本文不会对LCN做过多的介绍,只是从底层的网络框架来说明netty在实际项目中的应用。TM作为一个服务端,需要单独启动,而LCN的TM是一个springboot项目,环境搭建和启动过程和一般的springboot项目类似。LCN的TM和TC在springboot启动过...

2019-10-29 11:34:18 402

原创 LCN分布式事务学习1-项目环境搭建

1. 项目环境的搭建该项目是以spring boot为基础,spring cloud为远程调用技术框架,分为lcn(parent)、lcn-eureka、lcn-tm、lcn-service-one、lcn-service-tow几个模块。2. lcn模块(parent)2.1 pom.xml<?xml version="1.0" encoding="UTF-8"?&g...

2019-10-28 14:56:42 491

原创 netty学习06-编解码介绍

1. 编码和解码器在netty中编码器和解码器,其本质也是ChannelHandler的一种实现。1.1半包粘包问题产生原因:TCP/IP协议是面向流的协议。当客户端向服务器端发送数据时,会把数据划分为一个一个的包进行发送,服务器端收到数据时,也是一个一个的包,那么服务器端怎么知道一个请求包含几个包呢?即服务器端怎么把一个一个包组装成一个完整请求呢?1.2粘包/拆包解决思路...

2019-10-24 11:45:15 205

原创 netty学习05-handler介绍

1. Netty中Handler从应用程序开发人员的角度来看,Netty的主要组件是ChannelHandler,而ChannelHandler包括入站和出站两种类型。数据入站,指的是数据从底层的Java NIO channel到Netty的Channel。 数据出站,指的是通过Netty的Channel来操作底层的 Java NIO chanel。1.1 inbound入站(...

2019-10-23 10:40:00 921

原创 netty学习04-源码解析之服务端启动和接收读写过程

1. 服务端示例代码public class MyServer2 { public static void main(String[] args) { //负责接收客户端的连接请求 EventLoopGroup boosGroup = new NioEventLoopGroup(1); //负责接收客户端读写请求 Ev...

2019-10-21 14:42:19 187

原创 netty学习02-javaIO进化过程和模式

1. BIO 同步阻塞IO1.1 BIO服务器端示例代码public class JavaBioServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(7777); System.o...

2019-10-17 11:28:56 150

原创 LCN分布式事务框架学习1

1.概述 tx-lcn 官方地址:https://www.txlcn.org/ tx-lcn Github地址:https://github.com/codingapi/tx-lcn TX-LCN定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。 在一个分布式系统下存在多个模块协调来完成一次业务。那么就存在一次业务...

2019-09-03 09:05:34 274

原创 java对象头信息

做java开发几年了,但一直不知道如下问题:1. 一个java对象到底占用了多少内存空间,应该如何计算?2. 为什么在jdk1.6后,synchronized关键字性能有所提高,为什么会提高?并且很多文章中都说synchronized锁有偏向锁、轻量锁、重量锁等状态?3. java对象是在那里设置了指针指向对应的方法区中的元数据的?4. 在jvm垃圾回收时被标记为可回收但还未执行回...

2019-09-02 14:27:14 13354 13

原创 netty学习03-源码解析之事件循环组

public static void main(String[] args) { //负责接收客户端的连接请求 EventLoopGroup boosGroup=new NioEventLoopGroup(1); //负责接收客户端读写请求 EventLoopGroup workerGroup=new NioEventLoopGro...

2019-08-30 10:41:34 821

原创 netty学习01-基本代码结构

1.加载netty依赖<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.39.Final</version></dependency>2.服...

2019-08-29 13:46:31 238

原创 NIO零拷贝分析

场景介绍:在客户端通过读取本地文件并发送给服务器端,记录从发送开始到发送完成的执行时间,采用BIO方式和NIO零拷贝发送进行说明。先上代码,BIO方式代码如下:public class OldServer { public static void main(String[] args) throws Exception{ ServerSocket server...

2019-08-27 19:47:07 188

原创 JVM类加载过程

1. JVM类加载过程 1.概述 从类的生命周期而言,一个类包括如下阶段: 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。 2. 类加载时机 加载(loading)阶段,java虚拟机规范中没有...

2019-06-20 15:10:25 98586 28

原创 kafka学习笔记04-消费者

1. kafka消费者概念1.1 消费者和消费者群组 一个消费者可以从属于一个群组,一个群组可以有一个或多个消费者。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。假设一个主题有4个分区,如果群组里有一个消费者,那么这一个消费者负责消费4个分区里的数据,如果群组里有2个消费者,那么每个消费者消费2个分区,如果有4个消费者,那么每个消费者消费一个分区。如果消费...

2019-06-09 17:42:30 296

原创 kafka学习笔记03-生产者

1.生产者发送消息流程 1)生产消息:ProducerRecord 对象需要包含目标主题和要发送的内容。我们还可以指定键或分区。 2)序列化消息:生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。 3)分区器:如果ProducerRecord对象里指定了分区,那么分区器直接把指定的分区返回。如果没有指定分区 ,那么分区器会根据Producer...

2019-06-09 17:31:47 468

原创 redis学习笔记12-键值设计和使用技巧

1. key设计 可读性和可管理性:数据库名:表名:id,如用户中心的用户表里的数据,usersystemconter:usertb:128,表示用户中心系统里的用户表里id为128这条数据。 简洁性:在保证语义的前提下,控制key的长度,在数据量很大的情况下,也能节省一定的内存,如usersystemconter:usertb:128可以简化成usys:utb:128。...

2019-06-03 22:41:33 306

原创 redis学习笔记11-缓存设计

1. 缓存的收益和成本 缓存的收益: 1)加速读写:缓存通常都是全内存的,通过缓存的使用可以有效地加速读写,优化用户体验。 2)降低后端负载:帮助后端减少访问量,降低了后端的负载。 缓存成本: 1)数据不一致性:缓存层和存储层的数据存在着一定时间窗口的不一致性,时间窗口跟更新策略有关。 2)代码维护成本:加入缓存后,需要同时处理缓存层和存...

2019-06-02 17:20:11 575

原创 redis学习笔记10-集群

当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。1. 数据分布1.1 数据分布理论 分布式数据库把数据集划分到多个节点上,每个节点负责整体数据的一个子集。需要重点关注的是数据分区规则。常见的分区规则有如下几种。 1....

2019-06-02 13:28:07 1157

原创 redis学习笔记9-哨兵

1. redis高可用原来1.1. 主从模式的问题 当主节点出现故障时,需要手动进行切换。 手动切换步骤: 1)手动将一个从节点晋升为主节点 2)修改应用方的主节点地址 3)通过命令的方式让他从节点去复制新的主节点 4)老的主节点上线后,通过命令的方式让它去复制新的主节点1.2 高可用方案-redis哨兵模式 当主节点出...

2019-06-01 11:51:50 175

原创 redis学习笔记6-主从复制

1. 配置1.1 建立复制 配置复制的方式有以下三种: 1)在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生效。 2)在redis-server启动命令后加入--slaveof{masterHost}{masterPort}生效。 3)直接使用命令:slaveof{masterHost}{masterPor...

2019-05-26 15:52:27 222

原创 redis学习笔记5-持久化

1.RDB RDB持久化就是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。 1.1 触发机制 手动执行如下指令: save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。过时的命令 bgsave命令:Redis进程执行fork操作创建子进程,RD...

2019-05-26 11:28:05 327

原创 redis学习笔记8-理解内存

1. 内存消耗 1.1 内存使用统计 info memory指令,重点内容如下: used_memory:redis内部数据所占内存总量 used_memory_rss:从操作系统角度看redis占用的内存总量 used_memory_peak:used_memory的峰值 mem_fragmentation_ratio:内存碎片率,us...

2019-05-25 16:55:13 290

原创 redis学习笔记7-阻塞

1. 发现阻塞 客户端记录redis相关日志时,需要具体到redis节点,在出现连接相关异常时能定位的具体节点。 服务器端应利用相关工具加强对redis集群的监控,发现不正常指标时应进行报警,并快速反应。主要监控指标为慢查询、持久化阻塞、连接拒绝、CPU内存网络磁盘使用过载。 阻塞出现的原因主要包括内在原因和外在原因2方面。2. 内在原因 2.1 API...

2019-05-25 11:20:39 233

本文源码LCN.zip

lcn 分布式事务 框架 代码环境搭建

2019-10-28

springboot多数据源即分布式事务解决方案,添加对多线程的支持

实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。

2018-10-17

springboot多数据源即分布式事务解决方案

实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。

2018-10-16

solr5.2.1定时从数据库导入索引数据jar包

2017-05-14

solr5.2.1之IK分词器

网上其他关于IK分词器的介绍一般都是从文本文件中加载词库,我根据网上下载的ik分词器jar包,反编译后,修改了源码,支持从数据库定时增量导入词库。同时也支持从文本文件中导入词库,但没有定时增量导入的功能。

2017-05-14

IK中文分词包

sorl5对应的IK 中文分词包,至于适用于那个具体版本,至少我在5.2.1版本下测试通过,其他版本还未测试

2017-04-14

java代理实现webservice接口拦截器功能

本文根据java代理实现CXF拦截器异常时只能进入fault拦截器而不能继续向下执行的问题。 利用java代理让RMI具有拦截器的功能。

2014-03-18

webservice 学习总结

  Web Service通过标准通信协议,在互联网上发布有用的程序模块(以服务的方式),目前大部分是用SOAP来作通信协议。   Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL(Web Service Description Language)。 通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。这个是通过UDDI(Universal Discovery Description and Integration)来完成的

2013-12-17

RMI学习笔记

这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,是真正的分布式。 还包括spring环境下RMI的配置

2013-12-17

空空如也

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

TA关注的人

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