基于生成式注解为类添加toString方法

在组内讨论时,有同事提建议在把对象写到日志中时最好直接输出对象不要做任何加工,也就是尽量调用对象自己的toString()方法,不要用JsonKit.toJson(obj)这样先把对象转为json字符串再输出的写法。

这个建议不是没有道理的,jackson和fastjson这些json工具将对象序列化为字符串时会有一个自动检查推测的过程,在这个过程中做了如下事…

如何实现一个mock平台

过去几年里一直在做产业平台订单业务相关的开发工作。随着上下游相关业务日渐增多,系统日趋复杂,在开发测试中经常会遇到如下两个问题:
  1. 要实现一个功能可能会需要协调几个甚至十来个业务方来完成联调测试数据的准备
  2. 多人或多团队合作时,开发进度不好协调,如果关键节点上的一环开发进度慢了就可能会影响到整个项目的进度

mock是解决以上问题的一个办法:

  1. 我们可以不找依赖方生产数据,
…

使用Spring AOP实现注解式的分布式锁

这里简单说一个springboot生态下基于redis实现的分布式锁方案。预期实现的效果是在要加锁的方法上添加一个注解,然后就能根据请求参数得到并加上锁,方法执行完后,也会自动释放锁。这样在实现方法时,开发者就可以只关注业务逻辑,不用考虑加锁解锁相关的事情。务求整个过程的丝滑程度类似Spring的 @Transactional 注解。

这个分布式锁暂时基于red…

MapStruct属性多转一实现

在项目里遇到了需要使用mapstruct将source对象的多个属性转为target对象的一个属性的场景。针对这个问题研究了一段时间,发现想要解决得好一些还是挺让人头疼的。

先说结论吧:MapStruct支持将多个对象转为一个对象,但是不支持将多个属性转为一个属性。对,mapstruct是不支持这么做的。

最终的解决方案也非常简单:在使用mapstruct完成对…

IntelliJ IDEA将terminal设置为git bash

平时在windows系统上更习惯用git bash作为终端,因为gitbash支持一些常用的linux命令。

现在也想把IDEA中的terminal也替换为git bash, 操作如下:

打开IDEA配置项:IntelliJ Idea File—>settings—>Tools—->Terminal 。

设置 Shell path 为 D:\Program Files…

gorm 查询总是将表名转为复数的问题

这几天在用GoLang写个东西,期间用到了gorm框架。

在用gorm查询时遇到了一个奇怪的问题:就是这个框架会自动将model的名称转为复数形式。

先来看下具体的报错信息。这里是一个用户model:

…

企业直投广告RTA引擎

概述

RTA 即Realtime API的简称,是一种实时的广告程序接口,用于满足广告主实时个性化的投放需求。RTA 将流量选择权交给广告主,通常在定向环节中将用户身份的识别的请求发送给广告主,进行用户的筛选。

最近几年国内越来越重视用户隐私,许多之前用的很顺手的操作(比如上传人群包)在现在就得斟酌下了。RTA是解决这类问题的一个好方案。RTA可以在不上传人群包的情况…

企业广告直投之接化发

概述

这里主要是介绍下企业直投广告中的几个环节(广告监测、归因处理及转化回传)的业务逻辑,遇到的问题以及解决方案。

之前听过马师傅的“接化发”三字诀,觉得也可以套用到广告投放上,因此这次就按这个路子来说下。

接:广告监测

所谓“接”,当然就是接收广告投放相关的数据了。企业在媒体平台投放广告后会要求媒体将点击广告的用户信息及广告信息上报回来。

这么做的目的大致有如下几个…

Druid Json查询interval时间问题

前天在使用Druid完成一个新项目时遇到了查询时间错误的问题。就是日志一直在往Druid里灌,但是查近一个小时的数据怎么也查不到。经检查,日志消费情况,时间戳的填充也都是没有问题的。后来尝试将查询起始时间往前推了1天,总算查到了数据(查询时间巨长)。而且根据查询结果中的一些时间字段来看,还是有最近一个小时的记录的。这说明我的查询json是OK的,问题出在时间

…