这周在做线上查询优化的时候,用到了spring boot cache,结果就踩到了坑里,追查了好久最终发现了问题。这次使用的是spring boot cache 和 Ehcache. 不得不说,spring boot的注解式的使用cache非常方便,只需要在方法或者类上面加一个注解,这个方法就被增加了缓存,你自己根本不需要去if get or null put的逻辑,一起都给你做好了。
Hessian的使用
hessian主要是用来做序列化和反序列化的,序列化后的对象可以存储(文件或者数据库中),需要使用的时候,再将它反序列化得到对象。常用的序列化协议有人也能看懂的json,Google的protoBuf以及hessian等等。今天要介绍的就是hessian的用法。
一、当然是他的主功能,序列化,我们新建一个对象,然后将这个对象序列化之后存储到文件,然后再从文件中读取序列化后的数据,通过hessian反序列化成对象。代码如
通过文件覆盖类里面的属性–一种配置文件的另类实现方式
背景: 假设有这么一个场景,你写的jar包或者源代码服务提供给别人使用,你的默认配置是写在类里面的,如何通过一个ini文件来修改你写在类里面的配置呢? 毕竟用户不应该去修改你的代码,而是仅仅通过文件配置来实现配置的修改。
在一般的框架层面,系统已经支持的很好,例如spring boot的application.properties就是做这个事情的。另外,maven的插件也可以实现antx.properties的动态替换,下面我们用Java的反射手工的实现这么一个功能。
如何通过spring-boot-starter-redis使用aliyun的Redis
我有一个项目,使用的是spring boot构建,整个系统使用spring security构建了一个登录系统,关于spring boot security 如何使用,这里就不介绍了,这里只描述如何解决我遇到的问题。
背景 : spring boot + spring security 构建的登陆系统,只能满足单机的需求,如果程序部署在集群之上,那么就涉及到了session的共享问题,否则你的用户就会显示一会登陆,一会又没登陆(落到了另外一台机器)。核心思想是通过redis来在集群之间共享用户的session,实现这样的方案有两种方法。
Mybatis获取最近插入的主键
通常情况下,我们插入一条记录的mapper如下:
@Insert("insert into experiment_info (gmt_create, gmt_modified, user_id, name, type) values (now(),now(),#{userId},#{name},#{type})")
int saveExperimentInfo(ExperimentInfoDO infoDO);
但是有时候,我们需要拿到这次插入之后生成的主键应该怎么办呢? 其实很简单,只需要一句话就可以完成, 将以上的代码改为如下:
@Insert("insert into experiment_info (gmt_create, gmt_modified, user_id, name, type) values (now(),now(),#{userId},#{name},#{type})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int saveExperimentInfo(ExperimentInfoDO infoDO);
其中id是默认值,可以省略不写。
还有一种办法是,生成一个主键主动传入。
一次nginx导致的乌龙跨域事件
最近搭建了一个独立应用,使用相同的域名去访问的时候居然报出了"Invalid CORS request", 而且GET请求是好的,唯独POST请求报403 forbidden错误,response是, Invalid CORS request。 真是奇怪啊,明明同一个域名,为什么报跨域的错误呢?
spring boot mybatis的动态SQL
动态sql的用途
如果你的sql语句需要一些逻辑。例如 if (a) { order by status} else {order by id}等情况。 如果没有动态sql的做法是,把if和else的逻辑写到业务逻辑层,然后在你的mapper里写两个方法,分别是getxxxOrderByStatus(); getxxxOrderById(); 这两个方法除了order不一样,其他都是相同的,这就导致了代码重复,维护起来也比较困难。
如何在Mybatis注解中使用枚举类型
当下我们都在使用spring boot,配合注解的使用,我们彻底抛弃了xml的配置。在使用spring boot mybatis的时候,关于使用spring boot mybatis注解使用的文档却不清不楚。官网大部分的例子和使用都是叫你如何写mapper.xml。很多时候,一些特别的需求关于注解如何实现这个功能都是一句话带过,很多地方连一句话都没有。在使用spring boot mybatis的过程中,我遇到过很多特殊的需求。例如动态sql的使用,通过插件来注入修改用户的sql语句,枚举类型的使用等。很多case当时搞明白了,过了段时间再用又忘记了,去寻找解决方法的时候又没有靠谱答案,所以这里把用过的一些case写一个序列的文章,方便自己和后来者。
使用Java原生HttpURLConnection快速的完成一个http请求
通常情况下,我们都使用Apache的HttpClient来发起一个http请求,我们再提供一个思路, 使用Java原生的HttpURLConnection发起一个http请求,示例代码如下:
继续阅读“使用Java原生HttpURLConnection快速的完成一个http请求”
另一种使用Log4j的方式
一般情况下,我们不需要关注log4j的使用,只需要写配置文件就可以实现定制。例如在spring boot的工程中,我们只需要在resource中通过logback.xml文件来配置就可以使用日志系统,但是很多时候,我们需要自我定制日志的配置。例如,我们的程序是一个二方包提供给别人使用的时候,我们该怎么定制我们的二方包的日志呢? 本文要解决的就是这个问题