Utils-获取真实IP地址

获取真实 IP 地址。一次项目中有记录请求方的 IP,某天收集到的 IP 地址全是相同的,后面定位到问题是在阿里云启用了 SLB(负载均衡),收集到的全是负载均衡服务器的 IP,而不是用户端的 IP,后面改为判断从 x-forwarded-for 中取。

阅读更多

设计模式(十一):观察者模式(Observer Pattern)

观察者模式 又称为 发布 / 订阅(Publish / Subscribe)模式、源 / 监听模式(Source / Listener)。

观察者模式定义对象之间的一对多的依赖关系, 一个对象的行为发生改变,所有依赖于它的对象的行为也发生改变。观察者模式是对象的行为模式。

如果有了解 Servlet 监听器或消息中间件的 发布 / 订阅 模式的应该很好理解观察者模式。

阅读更多

设计模式(十):状态模式(State Pattern)

状态这个词较好理解,生活中很多事物都会有状态,有不同的状态,状态是可转变迁移的。例如 人有精神状态、身体会有疲劳状态或打鸡血状态。

在系统开发中,程序中有些对象可能会根据不同的状态做出不同的行为,把这种对象称为 有状态(stateful)的对象,把影响对象行为的一个或多个动态变化的属性称为 状态

阅读更多

设计模式(九):策略模式(Strategy Pattern)

软件开发过程中,当实现某一个功能可能需要支持多种算法或者策略(方案),例如电商促销,可以采用直接打折、满减计算、抵扣券、积分兑换 等方式,可以灵活地根据促销场景选择相应的促销方案(策略)。

每种策略都有自己的算法,选择具体的算法(策略)由客户端决定。策略模式可以将责任与算法分离,使得算法扩展更方便,易维护。

策略模式的实现方式在一定程序上可以解决和优化过多条件判断的操作,但这不是主要目的,只是附加效果。

阅读更多

设计模式(八):原型模式(Prototype Pattern)

系统中可能需要创建大量相同或相似对象,如果用构造方法创建则会比较耗时耗费资源,这时就可以使用 原型模式 ,生成对象更高效。

原型模式 就像复印机,可以复印多份相同的;像孙悟空的猴毛,拨下一吹就变出很多个孙悟空一样简单快捷。

阅读更多

设计模式(七):建造者模式(Builder Pattern)

软件系统中,通常会存在一些复杂的对象,由多个部件组成(拥有一系列成员属性,成员属性中有些是引用类型的对象),而部件的组装必须按照一定的顺序,否则不能组装成一个完成的复杂对象。

由于组合部件的过程很复杂,因此,这些部件的组合过程往往被 外部化 ,这里就可以引入 建造者模式,部件的组合过程由 建造者 负责,建造者 返回客户端一个建造完毕的完整对象,用户无须关系组装细节。

阅读更多

Sharding-JDBC系列(四):Sharding-JDBC 5.x 内置片分算法与实现

**特别注意**:此篇内容是基于 Sharding Sphere 5.x 版本(即将发布)的描述,来自官方文档 内置算法

原因是最初阅读 Sharding Sphere 官方文档时,直接看的是最新版本的文档,几乎全看完了才发现没有切换已发布的 4.x 版本的文档。

从该小节内容可以看出 5.x 相比 4.x 改动是挺大的,4.x 的分片算法需要用户自己实现,而 5.x 版本开始提供了内置分片算法。

阅读更多

Sharding-JDBC系列(三):Sharding-JDBC分片配置示例与说明

本篇描述 Sharding-JDBC 的数据分片的多种配置方式,支持 Java API 配置,Yaml 配置,Spring Boot Starter 配置文件配置,Spring XML 命名空间配置

Sharding-JDBC 的配置主要包含系统级属性配置分片属性配置分片算法策略配置,其它的还包括内置分布式序列算法,负载均衡算法,加密算法的配置。

此系列文章都是基于 Sharding-JDBC 4.x版本, 在写此文章时,正式发布的是 4.1.0版本,点此 4.x 官方文档

阅读更多

Java基础:Java 注解(Annotation)及使用

Java 注解(Annotation)是 JDK 1.5 引入的特性,与类、接口、枚举是在同一等级。它可以作用在类、属性、方法、局部变量、方法参数上,用于对这些元素进行说明,注释,解释。

注解在功能上可以看成是一个接口,注解实例就是一个实现该接口的动态代理类,可在方便在程序运行期间通过反射获取该字段或方法的注解的实例,来决定下一步如何处理。

阅读更多