自定义博客皮肤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 276

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

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

2019-08-18 15:34:29 120

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

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

2019-08-18 15:33:29 100

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

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

2019-08-18 15:30:52 130

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

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

2019-08-11 23:23:24 89

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

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

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

2019-08-10 22:07:56 108

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

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

2019-08-10 16:53:51 155

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

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

2019-08-10 01:51:21 320

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

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

2019-08-05 22:37:48 5206

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

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

2019-08-04 19:40:54 1726

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

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

2019-08-04 19:33:55 1322

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

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

2019-08-04 19:31:17 1949

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

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

2019-08-04 19:20:55 1506

空空如也

空空如也

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

TA关注的人

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