分类 Java 下的文章

问题原因:

业务中有个批量操作出现了BUG,昨天搞了一个下午,代码本地没有问题。测试环境就是报错,SQL不正确。把测试环境的代码拉下来跑,还是没有问题。
今天突然想到了个数据库连接的问题,因为线上的配置文件会会覆盖掉本地的配置文件,本地文件中是开启了批量操作的。

解决方式

在数据库连接中后加入:

allowMultiQueries=true

例如:

jdbc:mysql://XXXX/project?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

分析

有时间分析一下。

之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}catch,看着一点都不优雅,憋了这么久,今天终于决定对所有异常实施统一处理的方案。

- 阅读剩余部分 -

客户端负载均衡器:Ribbon

Ribbon实现软负载均衡核心:

  1. 服务发现 :依据服务的名字,把该服务下所有的实例都找出来
  2. 服务选择规则:依据规则策略,如果从多个实例中,选出有效的服务
  3. 服务监听:检测失效的服务,做到高效剔除

Ribbon主要组件:

  1. ServerList (获取所有的服务列表)
  2. IRule(根据规则选择出有效的)
  3. ServerListFilter(过滤掉失效的)

流程:

1.首先通过ServerList获取所有的服务列表
2.然后通过ServerListFilter过滤掉一部分地址
3.最后通过IRule选择一个实例,作为最终目标结果

默认负载均衡策略

  • 轮询

如何修改负载均衡策略

  • 去SpringCloud官网搜索Ribbon策略的配置(搜索:Customizing the Ribbon Client),可以找到从配置文件配置的方法

    需要在客户端配置如下:

PRODUCT:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

PRODUCT : 应用名

RandomRule :负载均衡策略为随机 (Ribbon的默认策略默认是RoundRobinRule

所有的负载均衡策略在IRule接口中可以看到:

1554275423045.png