观察者模式(Observer Pattern)
在对象之间建立一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
设计原则
- 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承
- 为了交互对象之间的松耦合设计而努力
分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于 Redis 的分布式锁;3. 基于 ZooKeeper 的分布式锁。本文介绍基于 Redis 实现分布式锁。
关于实现分布式锁的三种方式,可以参考之前的博文: 分布式锁简单入门以及三种实现方式介绍
本文中的分布式锁通过注解的方式实现,可以自定义重试次数,锁超时时间等。
在做项目的过程中,由于项目比较庞大,并且使用了 VPN 导致网络较差。在启动时经常报启动超时的错误,错误详情如下:
1 | 16:38:04,388 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0348: Timeout after [300] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was 'add' at address '[ |
从错误信息里面可以看出来,wildfly 在 300 秒内没有启动成功,导致 wildfly 自动停止启动。
IDEA 下载好 Git 项目,安装好 Gerrit 插件后,提交代码时无法将代码 Push 到 Git 仓库,报 missing changeId 的错误,或者说报 rejected by remote 的错误。
这是因为 IDEA 的插件在提交代码时不像 Eclipse 的插件那样可以填写 changeId ,所以丢失了 changeId。
这里有两种解决方法,第一种是下载 commit-msg 文件,放到项目中。第二种是配置全局的 commit-msg,在下载项目时,自动在项目中生成 commit-msg 文件。
commit-msg 文件下载地址:http://www.yujunyi.com/download/commit-msg
JRebel 是一款很强大的热部署工具,但是需要收费。当然收费是不可能的,我们只能想办法破解,破解的方法之一就是找一个 JRebel License Server ,用于激活。
关于激活方式以及 JRebel 插件的安装方式,可以参考我之前的博客 IDEA 下 JRebel 的安装及激活,Eclipse 下 JRebel 的安装及激活
由于之前使用的 JRebel License Server 是通过网上搜索到的,突然不能使用了,因此决定自己搭建一个 JRebel License Server 。
http://idea.yujunyi.com:8081/69972f4a-2911-46eb-87ed-7bbb086e4f38