yujunyi的博客

  • 首页

  • 分类

  • 归档

HeadFirst 设计模式(二)观察者模式

发表于 2020-05-09 | 分类于 设计模式

观察者模式(Observer Pattern)

在对象之间建立一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

设计原则

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
  2. 针对接口编程,而不是针对实现编程
  3. 多用组合,少用继承
  4. 为了交互对象之间的松耦合设计而努力
阅读全文 »

HeadFirst 设计模式(一)策略模式

发表于 2020-04-28 | 分类于 设计模式

策略模式(Strategy Pattern)

定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

设计原则

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
  2. 针对接口编程,而不是针对实现编程
  3. 多用组合,少用继承
阅读全文 »

spring mvc + redis 实现分布式锁

发表于 2019-10-22 | 分类于 spring mvc

说明

分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于 Redis 的分布式锁;3. 基于 ZooKeeper 的分布式锁。本文介绍基于 Redis 实现分布式锁。

关于实现分布式锁的三种方式,可以参考之前的博文: 分布式锁简单入门以及三种实现方式介绍

本文中的分布式锁通过注解的方式实现,可以自定义重试次数,锁超时时间等。

阅读全文 »

IDEA 插件推荐(持续更新)

发表于 2019-08-06 | 分类于 IDE

说明

IDEA 的强大之处还在于拥有许多优秀的插件,这些插件可以提升开发效率。

本文推荐一些 IDEA 的插件,都是自己使用过的,会持续更新。

一、JRebel (热部署插件)

该插件排在第一当之无愧。

开发中最浪费时间的肯定是不停的重启服务。增加一个类 、一个方法、一行配置,甚至增加方法的一个参数,都需要重启项目,这简直不能忍。

而使用该插件可以避免重启,可以做到一天只启动一次,甚至说好多天不重启项目。

阅读全文 »

解决 Wildfly 启动超时(concurrent timeout)

发表于 2019-07-10 | 分类于 JAVA

问题

在做项目的过程中,由于项目比较庞大,并且使用了 VPN 导致网络较差。在启动时经常报启动超时的错误,错误详情如下:

1
2
3
4
5
6
7
8
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 '[
("core-service" => "management"),
("management-interface" => "http-interface")
]'
16:38:05,642 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-4) WFLYJCA0019: Stopped Driver service with driver-name = Aerobay.war_com.mysql.jdbc.Driver_5_1
16:38:09,548 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0190: Step handler org.jboss.as.server.DeployerChainAddHandler$FinalRuntimeStepHandler@5f88823f for operation {"operation" => "add-deployer-chains","address" => []} at address [] failed handling operation rollback -- java.util.concurrent.TimeoutException: java.util.concurrent.TimeoutException
at org.jboss.as.controller.OperationContextImpl.waitForRemovals(OperationContextImpl.java:396)
......

从错误信息里面可以看出来,wildfly 在 300 秒内没有启动成功,导致 wildfly 自动停止启动。

阅读全文 »

IDEA 中设置全局 hook 解决提交代码时 missing changeId 的问题

发表于 2019-06-13 | 分类于 IDE

背景

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

阅读全文 »

利用 JEXL 动态计算表达式

发表于 2019-03-06 | 分类于 JAVA

定义

Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来校验数据。

背景

项目中,需要配置一些规则,然后根据动态的数据去验证规则。比如配置如下的规则:

人数大于5,并且名称包含 “test” 才能验证通过。

阅读全文 »

JRebel 激活地址及自建 JRebel License Server

发表于 2019-01-29 | 分类于 IDE

说明

JRebel 是一款很强大的热部署工具,但是需要收费。当然收费是不可能的,我们只能想办法破解,破解的方法之一就是找一个 JRebel License Server ,用于激活。

关于激活方式以及 JRebel 插件的安装方式,可以参考我之前的博客 IDEA 下 JRebel 的安装及激活,Eclipse 下 JRebel 的安装及激活

由于之前使用的 JRebel License Server 是通过网上搜索到的,突然不能使用了,因此决定自己搭建一个 JRebel License Server 。

自建的 JRebel License Server 地址

http://idea.yujunyi.com:8081/69972f4a-2911-46eb-87ed-7bbb086e4f38

阅读全文 »

回溯算法

发表于 2018-11-02 | 分类于 数据结构与算法

定义

回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。

回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。

阅读全文 »

Hibernate 中对象 set 属性时自动保存入库的问题

发表于 2018-10-22 | 分类于 JAVA

背景

在某个项目中,通过 Heibernate 查出某个对象后,对属性进行了 set 操作,并没有进行 update 操作,但是在数据中自动保存了。

显然这并不是我想要的,我只是想 set 一下属性,在前端显示,并不想入库,但是 Heibernate 自动保存了。

1
2
3
4
5
// 查出对象,原来的 name 为 user1
User user = userManager.findOne(1);
// 将userName 设置为 user2 ,用于前端显示,并没有保存
user.setName("user2");
// heibernate 自动进行了保存,库中的 name 为 user2
阅读全文 »
123

yujunyi

yujunyi的博客

28 日志
7 分类
© 2020 yujunyi
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Muse v6.5.0
苏ICP备18040805号