最大的变化应该是变身房奴了,租房时房租每年涨10%,租金加上公积金再加小几千的现金支出够供房,所以也还好吧。
选择在南山买个老破小、而不去关外买个大点的,主要是考虑上下班方便,一般情况下坐公交半个钟能到公司,走路回来也只要50分钟。
国庆后老妈也出来深圳,回家吃晚饭的次数就多了,吃过晚饭去中山公园溜溜老婆也挺好。
年初开始,大部门划分为多个小组,每个小组负责的模块都从原来的系统里拆分出来做服务,所有新项目基于 Spring Cloud 1.X 技术栈搭建。
我小组拆服务比较晚,正好可以看看其他组踩的坑,观察到的问题主要有:
Ribbon、Feign 的自动重试问题;对于没有做幂等处理的逻辑,就可能出现重复执行、数据重复等问题。
SpringBoot 默认的数据源属性前缀是 spring.datasource
,Druid 连接池的 SpringBoot 的组件的数据源属性前缀默认是 spring.datasource.druid
,这样可能导致配置不生效。还必须指定 Druid 获取连接的超时时间,否则可能都进入一直等待状态,应该是有活锁的bug。
"http-nio-8080-exec-100" #7057 daemon prio=5 os_prio=0 tid=0x00007fc83c0a3800 nid=0x1b99 waiting on condition [0x00007fd7c9a57001] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000c2923bd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at com.alibaba.druid.pool.DruidDataSource.takeLast(DruidDataSource.java:1444) at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1088) at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:953)
用 Apollo 做配置管理,要考虑 线程池、连接池的实时刷新问题。Apollo 一般只支持刷新 Spring 容器管理的 @Value
注解的属性,这些池的属性一般都是没有这样的注解的。
Hystrix 用线程异步执行调用时,导致调用链跟踪中断。这个是小问题,不影响业务。
别人踩的坑也是可以学习的;技术还是要自己去验证、不能网上直接抄段代码就用。
小组负责的模块是纯后台服务,业务逻辑比较复杂,偏偏又是跟钱相关,不能出错。代码质量、逻辑的正确就非常重要。
趁着这次拆服务,把单元测试做起来,觉得效果还是不错的。让一个实习生给一个逻辑写单元测试时,发现了一个之前没注意到的数据问题;自己给一个模块补充测试用例时,也发现在某个场景下的逻辑问题。
19 年准备采取如下的步骤来做单元测试: