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

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

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

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

原创 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
429

原创 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
312

原创 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
331

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

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

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

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

原创 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
2803
1

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

原创 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
1100

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

原创 LCN分布式事务学习3-服务端(TM)代码逻辑梳理
1. TM启动流程TM是一个springboot项目,在springboot启动时,会通过一个applicationRunner启动TM服务,即启动一个基于netty网络框架的服务端。NettyRpcServerChannelInitializer类的源码如下:这里重点关注下RpcAnswerHandler处理器。RpcAnswer是一个接口,有两个实现:Serve...
2019-10-30 13:52:43
730

原创 LCN分布式事务学习2-客户端(TC)执行流程介绍
1. LCN架构介绍注:本节内容来自LCN官网。LCN由两大模块组成,TC和TM,TC作为模块的依赖框架,提供TX-LCN的标准支持,TM作为分布式事务的控制方。事务发起方或者参与方都由TC端来控制。核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 加入事务组 添加事务组是指...
2019-10-29 17:57:18
1116
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
452

原创 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
555

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

原创 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
1038

原创 netty学习04-源码解析之服务端启动和接收读写过程
1. 服务端示例代码public class MyServer2 { public static void main(String[] args) { //负责接收客户端的连接请求 EventLoopGroup boosGroup = new NioEventLoopGroup(1); //负责接收客户端读写请求 Ev...
2019-10-21 14:42:19
221

原创 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
177

原创 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
321

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

原创 netty学习03-源码解析之事件循环组
public static void main(String[] args) { //负责接收客户端的连接请求 EventLoopGroup boosGroup=new NioEventLoopGroup(1); //负责接收客户端读写请求 EventLoopGroup workerGroup=new NioEventLoopGro...
2019-08-30 10:41:34
939

原创 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
291

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

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

原创 kafka学习笔记04-消费者
1. kafka消费者概念1.1 消费者和消费者群组 一个消费者可以从属于一个群组,一个群组可以有一个或多个消费者。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。假设一个主题有4个分区,如果群组里有一个消费者,那么这一个消费者负责消费4个分区里的数据,如果群组里有2个消费者,那么每个消费者消费2个分区,如果有4个消费者,那么每个消费者消费一个分区。如果消费...
2019-06-09 17:42:30
552

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

原创 redis学习笔记12-键值设计和使用技巧
1. key设计 可读性和可管理性:数据库名:表名:id,如用户中心的用户表里的数据,usersystemconter:usertb:128,表示用户中心系统里的用户表里id为128这条数据。 简洁性:在保证语义的前提下,控制key的长度,在数据量很大的情况下,也能节省一定的内存,如usersystemconter:usertb:128可以简化成usys:utb:128。...
2019-06-03 22:41:33
363

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

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

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

原创 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
262

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

原创 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
422

原创 redis学习笔记7-阻塞
1. 发现阻塞 客户端记录redis相关日志时,需要具体到redis节点,在出现连接相关异常时能定位的具体节点。 服务器端应利用相关工具加强对redis集群的监控,发现不正常指标时应进行报警,并快速反应。主要监控指标为慢查询、持久化阻塞、连接拒绝、CPU内存网络磁盘使用过载。 阻塞出现的原因主要包括内在原因和外在原因2方面。2. 内在原因 2.1 API...
2019-05-25 11:20:39
277
solr5.2.1定时从数据库导入索引数据jar包
2017-05-14
solr5.2.1之IK分词器
2017-05-14
java代理实现webservice接口拦截器功能
2014-03-18
webservice 学习总结
2013-12-17
RMI学习笔记
2013-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人