0%

指定扫包路径的坑

​ 由于项目包结构的修改对feign调用的类的编写修改了路径,原来的路径为cn.com.projectname.feign包下,新的feign需添加到cn.com.projectname.common.feign下。首次添加到该包下发现,新的feign类没有被加载到spring容器中,所以推测是扫包路径的问题,故通过@EnableFeignClients(basePackages = {"cn.com.projectname.feign", "cn.com.projectname.common.feign"})指定扫包路径,神奇的事情发生了,启动之后报错,内容为cn.com.projectname.common.feign下新增的那个feign类已经被加载到spring容器中,不允许二次加载!找了许久并没有找到什么问题。还尝试通过@FeignClient(contextId = "xxx")的方式指定创建类名称,也还是失败了,最后发现玄机是在@EnableFeignClientsbasePackages上,由于指定的两个包路径出现重叠部分,导致在扫包过程中重复添加某对象。

由拆箱引发bug
1
2
3
4
5
public static void main(String[] args) {
int a = 0;
Integer b = null;
System.out.println(a == b); // Exception in thread "main" java.lang.NullPointerException
}

由于b是包装类型,而a是基本数据类型,在比较时对b进行拆箱,所以会通过((Integer)null).intValue()进行拆箱,从而引发NPE

数据库索引字段过长

问题:在业务场景中,某些敏感数据需加密之后保存到数据库,而加密字段刚好又是频繁触发查询的字段。在一次插入数据时引发唯一索引异常。原因是索引长度小于数据库字段长度,在比对数据唯一性时截取了该字段的前面部分长度,导致匹配成功,抛出唯一索引异常。

方案:这种情况下不能随意调整索引的长度,这涉及到全局的修改。故通过新增一个字段保存改加密字段MD5值,并将索引挂在这个新增字段上,这样既保证了索引的唯一性,又可以不用修改索引长度。

nginx

nginx.confnginx的主要配置文件。

  1. 顶层下可以有eventshttp层。
  2. http层下允许有多个server层,用于对不同的网址做不同的配置。
  3. server层下允许有多个location层,用于对不同的(路由)地址进行不同的转发操作。

修改完nginx.conf配置文件后,可以使用如下命令对进行语法检查。

nginx -t -c /etc/nginx/nginx.conf

阅读全文 »