自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 重识Java动态代理(二)Spring中声明式编程实现

一、声明式编程的好处 声明式编程的好处有: 代码简洁,不需要写很多相同的实现代码 对使用者屏蔽了实现细节,使用者只需要声明要做什么,而不关心怎么做。 二、适用场景 声明式编程适合封装公共的,不涉及业务逻辑的基础服务,例如远程调用,数据库访问。 三、Spring中声明式编程的实现 下面看一个在Spring中通过声明式编程实现远程访问的Demo,Demo类结构如下: EnableRestCli...

2019-08-18 15:35:35 410

原创 重识Java动态代理(一)被忽略的场景

一、关于Java动态代理 谈到Java的动态代理,大多数人会想到: 一种代理模式,可以在实际调用方法前、后增加公共方法调用,例如记录日志,用户鉴权。 cglib代理和JDK动态代理的优缺点 从一些应用场景来看,代理可做的事情也可以通过AOP实现,所以暂时我们还用不到动态代理。 二、被忽略的场景 Java动态代理经常被忽略的一个应用场景是:动态实现接口方法而不需要实现类,这和作为代理类的场景是有...

2019-08-18 15:34:29 221

原创 Web应用全栈之旅-Spring篇(三)数据库事务

一、事务支持 Spring事务支持需要做如下两件事: 启动类上增加启用事务注解@EnableTransactionManagement。 @EnableSwagger2 @EnableTransactionManagement @SpringBootApplication public class MainApplication { public static void main(Stri...

2019-08-18 15:33:29 192

原创 Web应用全栈之旅-Spring篇(四)集成GraphQL

一、背景 当前端应用跨多端时,常碰到的问题有: 各端需要获取的信息量不同,例如手机端由于显示屏的大小需要获取的数据比PC端少,如果和PC端共用相同的接口,那么返回了很多冗余的数据,影响性能。 各端对数据的要求不同,有时需要聚合多个后端服务的数据,每一个聚合场景都新增一个服务会导致前端和后端耦合太紧;如果分多次调用又增加了前后端交互次数,从而影响性能。 为了解决这些问题GraphQL应运而生,其...

2019-08-18 15:30:52 211

原创 Web应用全栈之旅-Spring篇(二)集成mybatis

一、pom文件 引入mybatis <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> ...

2019-08-11 23:23:24 148

原创 Web应用全栈之旅-Spring篇(一)分布式Session

一、分布式Session的Redis实现 在微服务架构下,需要支持分布式Session,分布式Session可以通过Redis来实现,也可以通过数据库来实现,本文介绍Redis实现。 二、安装Redis 下载地址:https://github.com/MSOpenTech/redis/releases 选择对应的版本安装。 进入安装目录启动Redis。 三、pom文件 <de...

2019-08-11 20:27:16 129

原创 Web全栈应用之旅-基础篇(二)异常设计

一、异常设计 异常设计主要考虑以下方面: 二、异常信息 异常信息包含: 错误码:异常的唯一编码。 错误描述:告知使用者和调用方的描述信息。 异常堆栈:Java开发过程中,不可避免的会有未考虑的异常场景,堆栈信息可以帮助快速解决故障。 异常变量:错误描述中可替换的变量,变量的实际取值可以帮助快速查找错误原因,例如: ERR-1001=用户证件错误,用户ID:{} 其中ERR-1001是错误码...

2019-08-10 22:07:56 177

原创 Web全栈应用之旅-基础篇(一)前后端接口

一、前后端接口设计 前后端接口设计主要考虑以下几点: 二、接口内容 接口内容包括: 鉴权信息,如用于身份识别的token。 公共信息,例如用户ID,项目ID等需要传给后端的公共数据。 错误信息,如错误码,错误描述。 业务数据,业务使用到的数据,如订单,产品。 三、数据承载 数据承载指接口数据是放到HTTP消息头还是HTTP消息体当中,一些公共的信息如鉴权token,用户ID,项目ID可以考虑...

2019-08-10 16:53:51 220

原创 Web全栈应用之旅-启程篇

一、Web应用技术栈 在开发Web应用时,通常会使用到以下技术栈: 对应这些技术栈都已有相应的开源产品,可以根据项目需要选择适合的产品。 二、开源产品选型原则 开源产品选型主要考虑: 适合本项目,如满足功能需要,开发者已有的技能储备等等。 活跃度高,发现问题开发团队能及时解决。 已经有不少项目的成功经验。 三、iTracker产品选型 iTracker是一个开源任务管理系统,目的是通过实际项...

2019-08-10 01:51:21 521

原创 Java调用链跟踪关键技术(五)获取调用栈

一、调用栈 调用链监控仅仅获取调用顺序是不够的,如前所描述: 左边只体现了顺序,右边体现了顺序和调用栈信息。 二、获取调用栈 在Java中获取调用栈的方法如下: Thread.currentThread().getStackTrace() 代码示例: public class Man { public static void main(String[] args) { Man man ...

2019-08-05 22:37:48 5364

原创 Java调用链跟踪关键技术(二)Javaagent

一、Javaagent 网上关于Javaagent的介绍很多,请找度娘和谷兄。唯一提的一点是字节码注入比较好用的是bytebuddy,封装度很高,使用简单。 二、代码样例 以下为关键代码样例,可以依样画瓢自行改造。 1.编写agent入口 package com.javashizhan.trace; import static net.bytebuddy.matcher.ElementMatch...

2019-08-04 19:40:54 1893

原创 Java调用链跟踪关键技术(二)Javaagent

一、Javaagent 网上关于Javaagent的介绍很多,请找度娘和谷兄。唯一提的一点是字节码注入比较好用的是bytebuddy,封装度很高,使用简单。 二、代码样例 以下为关键代码样例,可以依样画瓢自行改造。 1.编写agent入口 package com.javashizhan.trace; import static net.bytebuddy.matcher.ElementMatch...

2019-08-04 19:33:55 1454

原创 Java调用链跟踪关键技术(一)总体介绍

一、调用链跟踪的作用 调用链跟踪包括 1.前端到后端的调用链 2.单个服务内部方法之间的调用链 3.微服务之间的调用链 4.应用服务和数据库之间的调用链 5.应用服务和第三方服务中间的调用链,例如Redis,MQ 调用链跟踪的作用有: 1.定位多个微服务调用故障时哪个是故障点。 2.性能分析 3.SQL分析 4.方法或服务调用合理性分析 5.调用逻辑和数据流分析,这点对于新人特别有用,看了调用链和...

2019-08-04 19:31:17 2127

原创 Java调用链跟踪关键技术(四)SQL监控

一、SQL监控一般思路 Java中SQL监控一般通过代理模式实现,如下: 右边是JDBC接口类。 左边是代理类,代理类需要实现JDBC接口,同时持有接口类的对象实例。 数据库连接工厂原来是获得JDBC接口类后继续操作,改为获取代理类去操作,因代理类实现了JDBC接口,所以对调用方来说无感知,仍然以原有的方式调用。 因此,最差情况是自行实现代理类,难度不大,只是所有接口方法都要实现一遍,纯体力活...

2019-08-04 19:20:55 1643

空空如也

空空如也

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

TA关注的人

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