_ 最近瞥了一眼项目的重启脚本,发现运维一直在使用 kill-9<pid> 的方式重启 springboot embedded tomcat,其实大家几乎一致认为:kill-9<pid> 的方式比较暴力,但究竟会带来什么问题却很少有人能分析出个头绪.这篇文章主要记录下自己的思考过程. kill -9 和 kill -15 有什么区别? 在以前,我们发布 WEB 应用通常的步骤是将代码打成 war 包,然后丢到一个配置好了应用容器(如 Tomcat,Weblogic)的 Linux…
什么是现实理想主义者 曾经有人看了我的文章,以为我是一个“理想主义者”,来找我聊天.他说:“你知道吗,我跟你一样喜欢简单优雅的代码.上次我在某公司工作,看到他们的代码乱得不成样子,二话没说给他们重写了,结果有几个小地方跟原来的代码不大一样,后来系统因此当掉了.老板对我说,明天你不用再来上班了!你说我是不是好心没好报啊?” 虽然我同情他丢了工作,然而我并不认同这种不经同意就推翻重写别人代码的作法.实际上我曾经跟一个老喜欢重写别人代码的人合作,后来整个团队(包括我)都差点被他给弄疯了.所以我对他说:…
Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda 表达式.函数接口了解一下 前言 我们都知道 Lambda 和 Stream 是 Java 8 的两大亮点功能,在前面的文章里已经介绍过 Lambda 相关知识,这次介绍下 Java 8 的 Stream 流操作.它完全不同于 java.io 包的 Input/Output Stream ,也不是大数…
随着业务变迁/需求变更,JavaEE 应用中会被迫连接多个数据源进行业务处理. 怎样在不影响原有项目结构的情况下,已最优雅/最简洁的方式动态切换数据源呢? 本文已一次添加数据源后动态切换实践为例,描述整个思考和实践过程,文中如有纰漏,还望指正. 1. 依赖 Spring  动态数据源实现 Spring 中提供了一个叫做 AbstractRoutingDataSource 抽象路由数据源对象继承自 AbstractDataSource 并实现了 JDK 中 DataSource 接口. 也就意味着…
大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求. 如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofit. retrofit-spring-boot-starter实现了Retrofit与spring-boot框架快速整合,并且支持了部分功能增强,从而极大…
[BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可以抵达其他所有草地.也就是说,这些草地和道路构成了一种叫做树的图.输入包含一个详细的草地的集合,详细说明了每个草地的父节点P_i (0 <= P_i <= N).根节点的P_i == 0, 表示它没有父节点.因为…
最近在项目中需要写一个数据转换引擎服务,每过5分钟同步一次数据.具体实现是启动engine server后会初始化一个ScheduledExecutorService和一个ThreadPoolExecutor线程池.schduel executor每过5分钟将dataTransformList中每一个tranform加入到线程池中运行.每一个数据转化器负责转换一组数据库数据.在执行过程中存在服务重启并且此时tranform正在转换数据并且数据没有全部操作完,此时希望正在执行的work能正常完成作…
目录 方式一:kill -9 java进程id[不建议] 方式二:kill -15 java进程id 或 直接使用/shutdown 端点[不建议] kill 与/shutdown 的含义 Spring注册的Shutdown Hook EurekaAutoServiceRegistration的stop()事件 EurekaServiceRegistry#deregister() 注销 总结 方式三:/pause 端点[可用,但有缺陷] /pause 端点 AbstractApplication…
优雅停机 Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果用户使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行. 原理 服务提供方 停止时,先标记为不接收新请求,新请求过来时直接报错,让客户端重试其它机器. 然后,检测线程池中的线程是否正在运行,如果有,等待所有线程执行完成,除非超时,则强制关闭. 服务消费方 停止时,不再发起新的调用请求,所有新的调用在客户端即报错. 然后,检测有没有请求的响应还没有…
前言 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册). 很多时候,其实我们使用这个技术的时候,可能都是因为项目需要,所以,我们就用了,但是,至于为什…