- 博客(27)
- 资源 (11)
- 收藏
- 关注
原创 Redis 多数据源配置
背景由于项目需求或者性能需求,一个项目可能需要使用多个 redis 数据源,具体使用如下。配置文件spring: redis: #默认数据源 expireSeconds: 120 commandTimeout: 10000 #redis操作的超时时间 pool: maxActive: 5000 #最大连接数 maxIdle: 30 #最大空闲连接数 minIdle: 5 #最小空闲连接数 maxWait: 3000
2021-03-09 18:11:31
1783
原创 Redis 用 scan 替代 keys
背景先看一下 keys 命令的定义。KEYS pattern查找所有符合给定模式 pattern 的 key 。KEYS * 匹配数据库中所有 key 。KEYS h?llo 匹配 hello , hallo 和 hxllo 等。KEYS h*llo 匹配 hllo 和 heeeeello 等。KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo。但是,当 keys 命令被用于处理一个大的数据库时,它可能会阻塞服务器达数秒之久,从而导致其他 redis 的
2021-03-04 13:18:40
1394
1
原创 HeadFirst 设计模式(二)观察者模式(Observer Pattern)
观察者模式(Observer Pattern)在对象之间建立一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。设计原则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起针对接口编程,而不是针对实现编程多用组合,少用继承为了交互对象之间的松耦合设计而努力气象观测站有一个气象观测站,可以获取到温度、湿度、气压等数据。每隔一定时间都会更新数据。有三个布告板,根据不同的规则显示气象数据。(当前温度湿度布告板、气温统计布告板、气压变化
2020-05-09 18:01:54
412
原创 HeadFirst 设计模式(一)策略模式(Strategy Pattern)
策略模式(Strategy Pattern)定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。设计原则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起针对接口编程,而不是针对实现编程多用组合,少用继承模拟鸭子游戏有一款模拟鸭子游戏,游戏中会出现各种鸭子,一边游泳,一边呱呱叫。根据面向对象技术,设计了一个鸭子...
2020-04-28 13:12:29
474
原创 spring mvc + redis 实现分布式锁(注解实现可自动重试)
分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于 Redis 的分布式锁;3. 基于 ZooKeeper 的分布式锁。本文介绍基于 Redis 实现分布式锁
2019-10-22 16:53:12
2118
1
原创 IDEA 插件推荐(持续更新)
IDEA 的强大之处还在于拥有许多优秀的插件,这些插件可以提升开发效率。本文推荐一些 IDEA 的插件,都是自己使用过的,会持续更新。
2019-08-06 13:30:22
736
原创 解决 Wildfly 启动超时(concurrent timeout)
在做项目的过程中,由于项目比较庞大,并且使用了 VPN 导致网络较差。在启动时经常报启动超时的错误,错误详情如下:```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
2019-07-10 10:08:43
5356
原创 IDEA 中设置全局 hook 解决提交代码时 missing changeId 的问题
IDEA 下载好 Git 项目,安装好 Gerrit 插件后,提交代码时无法将代码 Push 到 Git 仓库,报 missing changeId 的错误,或者说报 rejected by remote 的错误。这是因为 IDEA 的插件在提交代码时不像 Eclipse 的插件那样可以填写 changeId ,所以丢失了 changeId。这里有两种解决方法,第一种是下载 commit-msg 文件,放到项目中。第二种是配置全局的 commit-msg,在下载项目时,自动在项目中生成 commit
2019-06-13 15:44:38
4356
原创 利用 JEXL 动态计算表达式
Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来校验数据。背景项目中,需要配置一些规则,然后根据动态的数据去验证规则。比如配置如下的规则:人数大于5,并且名称包含 “test” 才能验证通过。按照传统的思路,一般就是写死代码,如...
2019-03-06 19:52:45
11624
原创 回溯算法
回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯算法的基本思想是:从一条路往前走,能进则进,不...
2018-11-02 16:36:06
215
原创 Hibernate 中对象 set 属性时自动保存入库的问题
在某个项目中,通过 Heibernate 查出某个对象后,对属性进行了 set 操作,并没有进行 update 操作,但是在数据中自动保存了。显然这并不是我想要的,我只是想 set 一下属性,在前端显示,并不想入库,但是 Heibernate 自动保存了。// ...
2018-10-22 17:08:38
6951
2
原创 kettle 教程(四):自定义 Java 代码
kettle 拥有很多自带的组件,能帮我们实现很多的功能。但是我们总有一些很复(qi)杂(pa)的需求,用自带的组件实现不了,或者说实现起来很复杂。那么这时我们就要用到万能的组件了( Java 代码),通过自己写代码来实现任何想要的功能。自定义 Java 代码假设有这样一个需...
2018-09-18 17:40:21
30594
18
原创 kettle 教程(三):条件判断 Switch Case
Switch / Case,顾名思义,类似 Java 中的 Switch / Case,用于进行条件判断。是 kettle 中一个非常常用组件。使用起来也非常简单,我们直接来看例子。场景介绍有一个 user 表,表中数据如下:我们需要对 co...
2018-09-13 13:30:45
55539
20
原创 MySQL 的事务隔离级别
我们先来回忆下什么是事务。考虑一种场景。银行转账,甲转 100 给乙,分为两步:甲扣除 100乙增加 100如果甲的钱扣了,乙的钱没有增加,那么数据就会不一致,这时候就要用到事务。因为事务的一个特性,就是原子性:要么不...
2018-09-07 09:58:15
330
原创 kettle 教程(二):常用输出(插入更新、表输出、执行 SQL 脚本)
上一篇 文章 ,主要讲了 kettle 的原理、安装及简单的使用。其中用到了一种输出方式:插入更新。这篇文章,主要介绍下常用的输出方式:插入更新、表输出、执行 SQL 脚本。插入更新插入更新,顾名思义,包括插入和更新两种情况。我们需要先设置一个条件,符合条件时,...
2018-08-30 09:06:09
25710
2
原创 kettle 教程(一):简介及入门
kettle 是纯 java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运行。有图形界面,也有命令脚本还可以二次开发。kettle 的官网是 https://community.hitachivantara....
2018-08-29 18:13:25
104624
20
原创 单例模式的破坏与改进
单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。单例的特点单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其...
2018-08-21 10:50:05
207
原创 spring mvc 统一异常处理
简介框架的强大之处就在于把很多需要码农多次重复编写的代码剥离出来,形成核心的处理方式。 在异常的处理这块,你不需要再有过多的 try-catch 语句,只需要把异常抛给框架就行了,框架帮你处理! 在 spring mvc 中的统一异常处理有3种,本文拿最简单的一种来演示 。自定义异常为了更精确的定位异常,区分异常种类,我们会用到自定义异常。考虑下如下场景:系统需要提供一...
2018-08-15 10:01:01
208
原创 代理解决跨域问题
之前讲到了解决跨域的两种方式:JSONP 和 CORS ,都是需要在被调用方来修改代码解决的。我们还可以通过代理方式,在调用方来解决跨域问题。代理解决跨域问题代理解决跨域问题的思路是:让发送出去的请求代理成是本域的 。举个例子:19...
2018-08-03 11:10:05
8631
原创 CORS 解决跨域问题
在上一篇 文章 中,讲到了利用 JSONP 来解决跨域问题。由于 JSONP 只支持 GET 请求 ,并且前后端代码都需要改动,因此推荐利用 CORS 来解决跨域问题。CORS 简介CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross...
2018-08-03 11:09:09
230
原创 JSONP 解决跨域问题
协议、域名、端口都相同才算同域,否则就是跨域。浏览器为了安全考虑(同源策略),不允许 axaj 跨域获取数据。浏览器会报错 xxx has been blocked by CORS policy: No 'Access-Control-Allow-...
2018-08-03 11:08:18
330
原创 Lombok
Lombok 是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。官方地址:https://projectlombok.org,github地址:htt...
2018-08-03 11:06:46
202
原创 spring mvc 多数据源配置 利用AOP手动切换
spring mvc 多数据源还有一种实现方式,利用 AOP 进行手动切换。基本原理是,我们自己定义一个 DataSource 类 DynamicDataSource ,来继承 AbstractRoutingDataSource ,然后在配置文件中...
2018-08-03 11:05:50
1062
原创 spring mvc 多数据源配置 根据package配置不同的数据源
有时候项目中可以需要连接两个数据库。因此就需要用到多数据源配置。原理就是配置两个dataSource,两个entityManagerFactory分别使用不同的dataSource,并设置不同的package扫描路径。配置文件a...
2018-08-03 11:04:05
861
原创 spring mvc 异步调用 @Async
“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。同步调用通过一个例子,来看下同步调用。 写了...
2018-08-03 10:35:01
8224
3
原创 热部署工具 JRebel IntelliJ IDEA 篇
上一篇文章讲到了在 MyEclipse 下安装 JRebel ,从而实现热部署。具体原理及安装方式可以移步至 热部署工具 JRebel —— MyEclipse 篇 进行查看。本文介绍在 IntelliJ IDEA 下安装 JRebel 。1. JRebel 插件...
2018-08-03 10:32:50
1340
原创 热部署工具 JRebel MyEclipse 篇
热部署(Hotswap)和 JRebel热部署是在不重启 Java 虚拟机的前提下,能自动侦测到 class 文件的变化,更新运行时 class 的行为。目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对于...
2018-08-03 10:25:37
1357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人