Java 开发

@Transactional 事务提交之后执行 @Async 修饰的方法

中间件

RabbitMQ 发消息报错 Listener not registered

Java 开发

SpringBoot 中 @Scheduled 的执行原理

Java 开发

Prometheus 监控的开关配置

数据库

MySQL 中 redo log、undo log、binlog 的总结

Java 开发

Spring 本地事务

Java 开发 / 数据库

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

32 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
1月9日 · 2020年

@Transactional 事务提交之后执行 @Async 修饰的方法

85 0
一个 @Transactional 修饰的方法A 的内部要调用另一个用 @Async 修饰的方法B,并且方法B 要在方法A 的事务提交之后,异步执行,大概就是下面代码这样。方法A 和 方法B 假如在同一个类中,则方法B 的 @Async 注解会失效:首先解释下 @Transactional 注解失效的原因:Spring 在扫描 bean 的时候会扫描方法上是否包含 @Transactional 注解,如果包含.....
12月29日 · 2019年

数据结构:跳表

127 0
本文主要总结下自己学习跳表时的一些笔记,主要包含跳表的由来、时空复杂度、增删改查和具体应用四个方面。二分查找的数据结构是数组,利用数组随机访问查找的时间复杂度是 O(logn)。如果数据结构是链表,可以达到这样的速度吗?答案是可以的,只是需要对链表进行改造,改造之后的结构就是跳表(又名跳跃表),是一种动态数据结构,可以支持快速的插入、删除、查找、按范围查找,功能类似于红黑树,Redis 中的有序集合使用的就是跳表(后文会说)。...
11月29日 · 2019年

ZooKeeper 简单概括

138 0
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。使用ZooKeeper的公司包括Rackspace、雅虎和eBay,以及类似于象Solr这样的开源企业级搜索系统。...
11月29日 · 2019年

RabbitMQ 发送端和消费端的总体设计

198 0
使用场景:系统解耦、异步、多服务订阅消息、消息可靠性、消息时序性 发送端:.....
11月29日 · 2019年

RabbitMQ 发消息报错 Listener not registered

3342 1
在完成 MQ 的发送方代码后,通过单元测试(mock 方式)发现发送方代码是没有问题的,但是通过 JOB 发送消息就一直提示“Listener not registered..”,又通过 http 直接调用接口来发送消息,也是提示“Listener not registered..”,然后各种检查配置、各种谷歌都无济于事,最后只能 debug 源码了。...
12月1日 · 2019年

本站事故复盘

213 2
2019年11月23日上午9点左右,在没有手动备份的前提下,升级了 MySql 数据库(从5.1到5.7)半小时后,升级结束,网站无法登陆,显示“error establishing a database connection”当时没多想,以为是升级后不兼容导致的,又切换到了5.1版本,网站还是报同样的错误当时由于有别的更重要的事,故先放弃了折腾下午14点左右,还未回家,尝试用手机登陆宝塔面板继续解决,搞了半天无果,故询问宝塔管理员,他让我在服务器上执行ps aux|grep mysql,可是手机端没有尝试过ssh登陆,故暂时放下了手机下午17点左右赶回家,开始查看原因,最后发现 MySql 压根没有安装成功,我又在原版本5.1和新版本5.7之间尝试切换了几次,都无法连接 phpmyadmin...晚上20点左右,打算重装宝塔,先备份数据库,瞬间备份完成,当时心惊了一下,赶紧查看备份好的文件,才几十B,完了,数据全没了..赶紧查看每周通过 shell 脚本备份的数据库压缩包,什么鬼,才几百B,解压,发现里面竟然只有一张用户表..2年的站就这样被自己搞没了......
12月5日 · 2019年

MySQL 中 redo log、undo log、binlog 的总结

1998 1
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。redo log 是物理日志,undo log 和 binlog 是逻辑日志,物理日志的恢复速度远快于逻辑日志。innodb 事务日志包括 redo log 和 undo log,redo log 是重做日志,提供前滚操作,undo log 是回滚日志,提供回滚操作。...
Java 开发More
12月15日 · 2019年

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

152 0
今天在用 JOOQ 生成代码的时候,即运行 mvn clean install 命令时,出现以下错误,代码中指定的驱动明明是“com.mysql.jdbc.Driver”,但是报错信息中显示的确是驱动“com.mysql.cj.jdbc.Driver”。经搜索,com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及以上版本中的.....
12月3日 · 2019年

SpringBoot 中 @Scheduled 的执行原理

276 0
前面有篇文章是“线上定时任务全部罢工”,本文主要从代码的角度分析下原因。注解 @Scheduled 的执行原理 1、加载所有使用 @Scheduled 注解的类及方法。Spring 首先会通过类 ScheduledAnnotationBeanPostProcessor 的 postProcessAfterInitialization 方法去初始化 bean,待初始化完 bean 后,就会拦截所有用到“@Scheduled”注解的方法,进行调度处理,具体细节请看下面代码:.....
12月1日 · 2019年

junit5 下 wiremock 正确使用方式

228 0
场景描述 通过 wiremock 方式模拟远程接口调用时,发现注解 @Rule 失效,即下图代码无效:@Rulepublic WireMockRule wireMockRule = new WireMockRule(8080);...
1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

32 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
12月6日 · 2019年

压测工具 JMeter 实操

238 0
Apache JMeter是一个Apache项目,可以用作负载测试工具,用于分析和衡量各种服务的性能,重点是Web应用程序。 JMeter可用作JDBC数据库连接,FTP,LDAP,Web服务,JMS,HTTP,通用TCP连接和OS本机进程的单元测试工具。...
12月18日 · 2019年

异步并发利器:CompletableFuture、parallelStream

222 0
生产上 prometheus 频繁告警java.net.SocketTimeoutException: timeout(远程调用超时),首先确定是哪个接口,后查看 Hystrix 的配置,发现 A 服务对 B 服务设置的超时时间是20s(一开始是没有发现未启用这个配置的),故一直在 review B 服务的这个超时的接口,一开始是在整个接口上,接口内部的 IO 操作、MQ 操作上都做了时间差的日志打印操作,发到线上后,发现有的请求达到了10s 多,但是 Hystrix 配置的超时时间是 20s 呀,百思不得其解,眼下做的只能是赶紧优化下 B 服务的这个超时接口了(毕竟耗时太严重了)。...
数据库More
12月10日 · 2019年

MySQL 常用锁和 MVCC 总结

235 0
前段时间,在 scala 项目的某块业务迁移到微服务上线前,测试环境意外地发生了两次死锁问题,触发死锁的原因不同,一次是因为数据迁移不到位,由更新操作导致,解决方式是重写 update 方法。另一个是因为前人写的代码太过于随意,一个事务中包含了多个模版方法,由不同的子类去实现方法,后人在实现时,有可能并不知道自己实现的方法是被嵌套在事务中的,从而扩展了很多操作,操作中不乏有耗时的远程调用,从而一个小事务被慢慢积累成一个大事务,最终导致了死锁,由于老业务(scala 项目)很复杂,当时解决的方式是将死锁的方法异步处理。从那之后,自己断断续续做了一些关于 MySQL 并发相关的笔记,本文先梳理下 MySQL 控制并发访问的两种手段(MVCC 和几种常用锁)。...
12月15日 · 2019年

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

152 0
今天在用 JOOQ 生成代码的时候,即运行 mvn clean install 命令时,出现以下错误,代码中指定的驱动明明是“com.mysql.jdbc.Driver”,但是报错信息中显示的确是驱动“com.mysql.cj.jdbc.Driver”。经搜索,com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及以上版本中的.....
11月29日 · 2019年

数据迁移后的一致性校验

277 0
目前正在对 scala 项目(某块业务)重构,重构成 Java 微服务,业务、表设计都有些许变化,其中涉及到数据迁移,简单来说就是从老表迁到新表(表结构发生了变化)。为了保证迁移前后数据的一致性,需要进行一些必要的验证。本文主要讨论下自己在进行数据一致性校验时用到的方法,仅仅作为一种数据验证的思路,分享给大家,内容可能有一些瑕疵,欢迎大家指正。...
12月5日 · 2019年

MySQL 中 redo log、undo log、binlog 的总结

1998 1
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。redo log 是物理日志,undo log 和 binlog 是逻辑日志,物理日志的恢复速度远快于逻辑日志。innodb 事务日志包括 redo log 和 undo log,redo log 是重做日志,提供前滚操作,undo log 是回滚日志,提供回滚操作。...
1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

32 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
中间件More
12月7日 · 2019年

基于 Redis 实现分布式锁

231 0
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。由于线上出现了并发问题,导致出现了很多脏数据,分布式环境下,考虑到乐观锁无法解决,也只能请教于分布式锁了。实现分布式锁的方式有:数据库乐观锁、基于 Redis 的分布式锁.....
11月29日 · 2019年

RabbitMQ 发送端和消费端的总体设计

198 0
使用场景:系统解耦、异步、多服务订阅消息、消息可靠性、消息时序性 发送端:.....
11月29日 · 2019年

RabbitMQ 发消息报错 Listener not registered

3342 1
在完成 MQ 的发送方代码后,通过单元测试(mock 方式)发现发送方代码是没有问题的,但是通过 JOB 发送消息就一直提示“Listener not registered..”,又通过 http 直接调用接口来发送消息,也是提示“Listener not registered..”,然后各种检查配置、各种谷歌都无济于事,最后只能 debug 源码了。...
11月29日 · 2019年

ZooKeeper 简单概括

138 0
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。使用ZooKeeper的公司包括Rackspace、雅虎和eBay,以及类似于象Solr这样的开源企业级搜索系统。...
算法相关More
12月29日 · 2019年

数据结构:跳表

127 0
本文主要总结下自己学习跳表时的一些笔记,主要包含跳表的由来、时空复杂度、增删改查和具体应用四个方面。二分查找的数据结构是数组,利用数组随机访问查找的时间复杂度是 O(logn)。如果数据结构是链表,可以达到这样的速度吗?答案是可以的,只是需要对链表进行改造,改造之后的结构就是跳表(又名跳跃表),是一种动态数据结构,可以支持快速的插入、删除、查找、按范围查找,功能类似于红黑树,Redis 中的有序集合使用的就是跳表(后文会说)。...
12月13日 · 2019年

简单递归问题

175 0
需求 给定一个十进制数,每一位要么是 0,要么是 1,为 1 的那一位保持不变,为 0 的那一位可以为 0 也可以为 1,求所有的组合场景。示例:给定 int num = 1001,则 targets = {1001, 1101, 1011, 1111}......
网站建设More
12月1日 · 2019年

更新宝塔导致无法访问

162 0
之前使用的是3.xx版本的宝塔,然后在宝塔面板上点击了更新的按钮,结果宝塔直接无法访问了,首先检查了服务器安全组配置是没问题的(8888 端口是放通的),然后通过如下图的命令查看,发现 8888 端口没有被监听到,确定应该是宝塔自身问题导致的,难道是我升级的姿势不对?...
11月26日 · 2019年

代码实现特色圆形 logo

150 0
代码实现特色圆形 logo...
11月26日 · 2019年

app 端底部菜单栏源码

212 0
app 端底部菜单栏源码...
11月28日 · 2019年

Icon 图标自动旋转教程

152 0
教程:拿 wordpress 的 Icon 图标来举例,wor...
11月26日 · 2019年

代码实现网站音乐播放器

201 0
代码实现网站音乐播放器...
11月28日 · 2019年

鼠标点击显示圆圈动画

208 0
今天,给大家介绍一款 wordpress 鼠标点击特效,当鼠标单击网页...