FeignClient 读取类上的公用RequestMapping

代码先行 SpringCloud 中使用Feign远程调用。 Provider @RequestMapping(value = "/common-url") @ResponseBody public class TestController { @GetMapping(v

Aspect注解 Pointcut Annotation on Interface

本意的实现效果 @Aspect @Component public class MyAspect { @Pointcut(value = "@annotation(com.example.aoptest.demo.aop.MyAnnotation)") publ

Mybatis日志打印美化sql语句

原本的Mybatis log会分两行打印日志,参数用?占位,实际参数在另一行,对于阅读体验很不好,现在可以使用填充替换后的sql语句。 import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ClassUtils; imp

SpringMVC(Springboot)返回文件方法

原本的返回方法 @RequestMapping(value = "/download/{fileName}") public void downloadFile(@PathVariable String fileName) throws IOException{ // 拼接

一步一步写APM(八)--出现spanId重复现象,以及优化

很长时间没有更新这个系列,再次更新优化。 上次的agent在tomcat测试中发现了几个问题: 问题一:同应用多线程 多次请求同一个网址spanId出现了重复,导致server端绘制的流程出现了问题。 {"spanId":1,"startTime":15454

Quartz定时器的执行问题

线上出现了定时器执行问题,日志如下: 2018-08-23 23:50:00,001 | INFO | org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-5:InvalidDataSchedule:18 | --

@Autowired和构造方法执行的顺序解析

先看一段代码,下面的代码能运行成功吗? @Autowired private User user; private String school; public UserAccountServiceImpl(){ this.school = user.ge

一步一步写APM(七)--Dubbo插件及跨服务的链构造

Dubbo插件比较简单,此处不做过多说明,阶段Tag:添加Dubbo插件 到目前为止已经有几种比较常见的插件了:Tomcat,Jdbc,Jedis,Dubbo。已经基本涵盖了大部分开发组件,当然还有其他的比如ES、grpc、http、jetty、mongodb、memcached等等,这些如果非特殊

一步一步写APM(六)--Mysql插件

Jdbc拦截是一个比较特殊的情况 首先,我们需要拦截的依然是Jdbc的查询,更新等操作,具体涉及的函数就是:execute、executeQuery和executeUpdate。 但是对于Statement是有多种的,具体见:https://my.oschina.net/heweipo/blog/3

一步一步写APM(五)--数据的收集与简单展示

(四)中我们已经简单的构造出了链,现在我们想把数据收集起来 public class ContextManager { ... public static Span stopSpan(){ Span span = get().stopSpan();

一步一步写APM(四)--Jedis插件、线程内链的构造

一点修改和准备工作 在tomcat测试项目中添加jedis相关代码(需要本地开一个redis),代码省略 提取Enhancer公共部分 public abstract class PluginEnhancer { public abstract String getEnhanceClas

一步一步写APM(三)--拦截以及Interceptor重构

问题在前面的代码中,为了用最简单的代码理清逻辑以及实现功能,我们使用了很多的常量值,比如named("org.apache.catalina.core.StandardWrapperValve"),named("invoke");而且现在只能拦截某些类的某些方

一步一步写APM(二)--拦截Tomcat监控WebApp

知识准备,org.apache.catalina.core.StandardWrapperValve StandardWrapper代表的是一个Servlet,那么它也就是容器调用栈中的最终点.Http请求到达后进行的处理也不单单只是调用了Servlet的方法.它还经过了一层的过滤器.它对外服务与

一步一步写APM(一)--ByteBuddy初步应用及初步搭建

准备 前面我们已经通过相关知识知道一般APM项目都是通过javaagent来对原项目代码进行一些改造以实现调用链需要的相关操作-- 比如加入上下文,添加必要的调用监控数据。 我们的主要开发工具就是ByteBuddy 注意,本系列相关文章涉及的源码放在了github上,有些代码不会贴出,请查看源码。地

通过使用Byte Buddy便捷地创建Java Agent

现有的APM项目为了保证监控服务和被监控服务互相独立且对被监控服务有低侵入性甚至无侵入性,会采取javaagent的方法对原项目远吗进行一些“改造”以实现想要的功能--比如插入想要的数据,上下文操作。 Java agent是在另外一个Java应用(“目标”应用)加载class文件之前做拦截把字节码

线程池将守护线程转换成用户线程导致的tomcat shutdown失败

现象 上线过程中出现调用tomcat的shutdown.sh 卡住导致tomcat无法停止的情况。 执行了tomcat的shutdown脚本后,java进程仍然存在。其实无法停止不是tomcat问题,是应用有问题,否则可以跑一个空tomcat,保证shutdown百分之百生效。 先说一下tomcat

新版tomcat类加载机制改变导致的不同类加载器加载同一个类的实例赋值出错

出现问题 调用链部署过程中某个项目出现: Caused by: java.lang.IllegalArgumentException: Can not set static XXX field redis.clients.jedis.Jedis.delegate$5975b70 to XXX at

RPC服务追踪的原理与实践

在分布式服务化架构下,由于分布式服务间存在相互依赖,彼此协同来完成各类业务场景。下图是一个典型的业务场景,从前端发起一个请求,到最后的业务完成,需要经过很多环节,这些环节可能都是分布式服务的方式提供,部署在不同的服务器上进行。而在这种复杂的分布式服务场景下,为了定位问题、性能瓶颈查询、异常日志跟踪等

Spring中的applicationContext与SpringMVC的xxx-servlet的区别

一直搞不明白两者的区别。 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置。为什么需要applicationContext.xml?一定必须? 一、 因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applic

SpringMVC上传文件的三种方式

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html 前台: <%@ page langu
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×