使用 Spring AOP 注意事项

2018年11月25日 没有评论

说实话,由于我个人某些基础不是很牢固,所以前一段时间关于 Spring Aop 踩了一个坑,其实很简单,今天就记录一下,先说结论:

不能被 Spring AOP 增强的方法:

1. 基于接口的动态代理:除 public 外的其它所有的方法,此外 public static 也不能被增强
2. 基于 CGLib 的动态代理:private、static、final 的方法,也就是只有 public 和 protected 可以,但是要注意切入点语法的配置

测试用例如下,pom 文件:


        <dependency>[......]

Read more

分类: Java 标签:

【转载】Redis 分布式锁进化史

2018年10月14日 没有评论

按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而说到微服务架构必然牵涉到分布式,以前单体应用加锁是很简单的,但现在分布式系统下加锁就比较难了,我之前曾简单写过一篇文章,关于分布式锁的实现,但有一次发现实现的分布式锁是有问题的,因为出问题的概率很低,所以当时也没在意,前几天和朋友聊这个问题,想起来看过一篇文章,写的不错,今天特转载过来,希望能让更多的人看到,同时也加深一下记忆。原文链接是:http://tech.dianwoda.com/2018/04/11/redisfen-bu-shi-suo-jin-hua-shi/

以下为原文:

近两年来微服务变得越来越热门,越[……]

Read more

分类: Java 标签: , ,

【转载】设计 RPC 接口时,你有考虑过这些吗?

2018年9月2日 没有评论

按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而微服务架构最重要的就是面向接口编程,所以接口的设计就尤为重要了,我一直认为一个好的接口自己会说话,也就是看到接口,我就知道这个接口是干啥的、参数是啥、返回值是啥以及可能会遇到哪些问题,但目前对 RPC 接口设计可以说有两派,前一段时间看了一篇文章是我的想法完全一样,特转载到本人博客,希望更多的能够看到、有更多的人参与讨论两种的优劣。

在开始之前呢,先吐槽一个本文没有提到的问题,我不知道有些人是怎么想的,对外暴露的接口,也就是最终被打成 jar 包供外部服务依赖模块,有些人喜欢在里面引入各种无关的第三方依赖,我遇到过把 spri[……]

Read more

分类: Java 标签: ,

关于 tomcat 排查错误的一个小小感悟

2018年8月17日 没有评论

前几天响应公司的要求,系统日志接入公司的 ELK,按照中间件的同学要求之后,果然不出意外的遇到了问题,项目跑不起来了,控制台 catalina.out 打印日志如下:


Aug 16, 2018 10:02:21 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8144"]
Aug 16, 2018 10:02:21 AM org.apache.coyote.AbstractProtocol start
INFO: Starting[......]

Read more

分类: Java 标签: ,

关于 MySQL 中 utf8 的问题

2018年8月4日 没有评论

有一个段子,我每次看了都头皮发麻,这个段子是:

手持两把锟斤拷,口中疾呼烫烫烫,脚踏千朵屯屯屯,笑看万物锘锘锘

我相信凡是和我有一样感觉的应该都知道这是啥,所以为了避免这个问题,我们工作的建议就是,所有的地方都设置成:UTF-8,确实我们这样工作了很多年,不知道哪一年 emoji 突然火了,于是在上家公司做论坛的时候,有一个小伙伴遇到了类似于下面的一个小问题(我找不到原报错日志了):


Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1

当时问我,我也[……]

Read more

分类: MySQL 标签: , ,

JVM 群关于 Autowired 的讨论

2018年7月29日 没有评论

前一段时间 JVM 群有人遇到了一个 stackoverflow 的问题,引发了一个关于 Autowired 的讨论,由于我做的项目可能比较小,并没有遇到过,但感觉这也许就是一个坑,记录下来
,如果谁有遇到这个问题,说不定就有帮助。

下面我会贴出来群里面的讨论,如果不想看,直接看我的得出的结论,所以 TL;DR 版:

spring 中依赖注入有两个注解:Autowired 和 Resource。Resource 的注入的时候是 byName,而 Autowired 注入的时候是 byType,所以平时并没有很大的区别,但 Autowired 和 getBean(Object.cl[……]

Read more

分类: Java 标签: , ,

Markdown 基本语法介绍

2018年7月15日 没有评论

Markdown 是我很喜欢的一个轻量级标记语言,但也因为不常写,所以有些语法记得不是很清楚,经常写的时候需要查一些资料,所以这次就把一些简单的常用的语法做个笔记。

在介绍 markdown 语法之前,先写一点废话。

一. markdown是什么?

简单的一句话就是,Markdown 可谓是程序员必备的一种写作格式!你还在用 word 写文档么?简直 low 爆了,赶紧抛弃,从现在开始,立刻,马上,学习下 markdown。

二. markdown有什么好处?

简单说,语法简单、再也不用专注排版、兼容 html、还有其他的的很多很强大的功能(这么厉害,你的博客为啥[……]

Read more

分类: Java 标签: , ,

Git 配置多个用户身份和强制检查各个项目用户名邮箱设置

2018年7月1日 没有评论

今天的文章比较简单,1. 就是为 Git 单个项目做身份配置,就是配置单独的邮箱和用户名。因为我们平时可能会在不同的几个项目中工作,各个项目的用户名可能不同,最基本的就是公司的项目和我们自己在 GitHub 上玩,所以为了保证日志的准确性和提交时无误,最好对各个项目设置。以前没有研究过,所以就一只默认用公司的用户名玩,但一直感觉不太好,2. 在提交时,user.name, user.email会进入日志。这些信息,是追踪代码变更的关键,所以必须配置,偶然看见秋大有篇文章写这个,试了一些不错,记录一下。

全局配置和项目配置

全局配置信息在: ~/.gitconfig
项目配置在项目[……]

Read more

分类: Java 标签:

org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map

2018年6月2日 没有评论

上周和同事一块开发一个功能模块,在开发中拉下来同事代码,在测试的时候,突然跑不通了,报错信息如下:


org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map java.util.Map

	at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementParameterMap(MapperBuilderAssistant.java:320)
	at org.apache.ibatis.builder.M[......]

Read more

上传 Java 库到 Maven central repository

2018年5月20日 没有评论

之前看过 Trinea 写过一篇文章,如果上传 Java 库到 Maven central repository,前一段时间感觉公司封装的 mybatis-generator 不好用,完全没有解决原生的 mybatis-generator 的问题,所以就重新做了一次封装,主要是加了查询分页,然后就想到是不是可以上传到 Maven central repository 玩玩,看了一下 Trinea 的这篇文章感觉挺简单的(原文见后面参考资料),但实际上还是有一些坑,具体的可以看 Trinea 的这篇文章,我主要写一下遇到的一些坑。

先说明一下,pom 文件请参考我的配置:https://g[……]

Read more