Category: Java Architecture

[总结]消息中间件–5 消息处理失败&死信队列 0

[总结]消息中间件–5 消息处理失败&死信队列

消息中间件消费到的消息处理失败怎么办? 一般生产环境中,如果你有丰富的架构设计经验,都会在使用MQ的时候设计两个队列:一个是核心业务队列,一个是死信队列。 核心业务队列,就是比如专门用来让订单系统发送订单消息的,然后另外一个死信队列就是用来处理异常情况的。比如说要是第三方物流系统故障了,此时无法请求,那么仓储系统每次消费到一条订单消息,尝试通知发货和配送,都会遇到对方的接口报错。 此时仓储系统就可以把这条消息拒绝访问,或者标志位处理失败!注意,这个步骤很重要。 Please follow and like us:0

mybatis 动态参数及其 foreach collection使用 0

mybatis 动态参数及其 foreach collection使用

Mybatis里传参数入Mapper一般基于基本类型,Integer、String、List、Hashtable,然后以此构架foreach迭代动态sql。

但是这种方法只针对一级引用,如果参数是Object,比如将下面的Page作为参数传入,其中的PageData已经put了一个名为listName的List。

但是下面例子调用失败,mybatis无法辨认二级参数pd.listName是个List。

没找到直接解决办法,只能绕过foreach而采用String基本类型,尝试如下:

结果测试结果始终返回id为1的一个数据,而不是1,2,3,4,5,6六个数据。原因是带 #{} 的参数使用的是PreparedStatement,会有类型转换,最终注入sql的不是

而是加一层包装作为String注入:

解决办法,使用 $ {} 参数,这样mybatis不会做任何预处理,直接作为String使用。

注意 但是在mybatis中,”${xxx}”这样格式的参数会直接参与sql编译,从而不能避免注入攻击。在涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式,所以,这样的参数需要我们在代码中手工进行处理来防止注入。     参考 mybatis 传入参数及其 foreach collection的三种用法 https://stackoverflow.com/questions/11760074/mybatis-string-as-parameter Mybatis 中$和#千万不要乱用 Please follow and...

[转]阿里巴巴如何基于 Kubernetes 实践 CI/CD 0

[转]阿里巴巴如何基于 Kubernetes 实践 CI/CD

首先简单解释一下何为 Kubernetes 来帮助大家理解。Kubernetes 是一个生产可用的容器编排系统。Kubernetes 一方面在集群中把所有 Node 资源做一个资源池,然后它调度的单元是 Pod,当然 Pod 里面可以有多个容器。 就像一个人左手抓着 ECS 资源或计算资源,右手抓容器,然后把它们两个匹配起来,这样它就可以作为一个容器的编排系统。 Please follow and like us:0

[总结]分表分库后迁移和部署上线 0

[总结]分表分库后迁移和部署上线

如何部署 停机部署法 大致思路就是,挂一个公告,半夜停机升级,然后半夜把服务停了,跑数据迁移程序,进行数据迁移。 Please follow and like us:0

[汇总]CI/CD经验 0

[汇总]CI/CD经验

代码重构!你敢吗? 我们想了双流程验证的方案。 我们将重构部分的代码全部封装起来,然后提供一个新的接口,一个请求进来后,我们分别执行旧的业务逻辑,也将请求发给新接口。在流程的最后,我们将新旧流程构造出的字段,进行逐个字段的对比。新流程只验证正确性,不做实际的输出。 Please follow and like us:0

[转]谈谈怎么做服务隔离 0

[转]谈谈怎么做服务隔离

做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 因此,做服务隔离是很有必要的。那么怎么隔离呢? 按种类隔离 按用户隔离 OK,接下来开始细说这两种方式! Please follow and like us:0