在 Java 的世界里遨游,如果能拥有一双善于发现的眼睛,有很多东西留心去看,外加耐心助力,仔细去品,往往会品出不一样的味道. 通过本次分享,能让你轻松 get 如下几点,绝对收获满满. a)如何让 Java 程序实现优雅停服?有思想才是硬道理! b)addShutdownHook 的使用场景?会用才是王道! c)addShutdownHook 钩子函数到底是个啥?刨根问底! 1. 如何让 Java 程序实现优雅停服? 无论是自研基础服务框架,还是分析开源项目源码,细心的 Java 开发同学,都…
在客户端添加如下配置 pom依赖 actuator.jar包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>或者<dependency> <groupId>org.springfra…
http://majihua.baijia.baidu.com/article/10386 微软现在成了招人恨的角色,因为其史上最成功的操作系统WINDOWS XP在4月8日就将停止服务,而社会上对XP停止服务会带来的系统性风险的担忧即将接受检验. Windows XP 发布于2001年10月,是迄今为止人类历史上服务时间最长的电脑操作系统,作为那个时代WINTEL联盟一统天下的利器,在当今时代早已经无法满足触控.移动和新应用程序的需求,寿终正寝也顺理成章.事实上,2013年10月18日,微软和…
近日,在阿里云服务器上部署了一个Python,Web框架为Tornado,服务器为Ubuntu 16.04. 服务的启动也十分的简单: python services.py 我是利用Xshell工具连接云服务器的,在启动服务的时候发现,一旦我关闭了Xshell窗口,服务就会停止,这就意味我必须时刻保持着对服务器的连接,服务才不会被Stop,这并比现实,所以我想写个脚本文件来控制程序的start以及stop. 具体实现如下 : service-manager.sh(因为我是直接在root权限下进行…
在逛 Stack Overflow 的时候,发现了一些访问量像‎安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多程序员被困扰过. 来回顾一下提问者的问题吧: 在 Java 中,数组虽然是一个对象,但并未明确的定义这样一个类,因此也就没有覆盖 toString() 方法的机会.如果尝试直接打印数组的话,输出的结果并不是我们预期的结果.那有没有一些简单可行的方式呢? 如果大家也被这个问题困扰过,或者正在被困扰,就…
在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素的,今天我来教大家三种方式. 前提知识准备 for循环的执行顺序 这里借用百度百科的一张图,简明扼要的介绍一下. Iterator迭代器介绍 迭代器:迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式.Iterator 模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不…
判空灾难 ​ 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来说,也是Exception家族中最亲近的一员了. ​ 为了避免NullPointerException来找我们,我们经常会进行如下操作. if (data != null) {     do sth. } 如果一个类中多次使用某个对象,那你可能要一顿操作,so: ​ “世界第九大奇迹”就这样诞生了.…
客服端代码:有注释 package javanet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class demo2client { pub…
来源:lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的. 由于本文只作一些经验之谈,不涉及到基础知识部分,如果读者对异常的概念还很模糊,请先查看基础知识. 如何选择异常类型 异常的类别 正如我们所知道的,java中的异常的超类是java.lang.Throwable(后文省略为Throwable),它有两个比较重要的子…
转自:lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的. 由于本文只作一些经验之谈,不涉及到基础知识部分,如果读者对异常的概念还很模糊,请先查看基础知识. 如何选择异常类型 异常的类别 正如我们所知道的,java中的异常的超类是java.lang.Throwable(后文省略为Throwable),它有两个比较重要的子…
原文地址:http://blog.didispace.com/java-lombok-1/ 关于Lombok,其实在网上可以找到很多如何使用的文章,但是很少能找到比较齐全的整理.我也一直寻思着想写一篇各个注解用法的总结,但是一直都没有付诸行动.今天看到了微信公众号”原力注入”推送的这篇文章,总结的内容很全,所以分享给所有关注我博客的朋友们. Lombok简介 Project Lombok makes java a spicier language by adding ‘handlers’ tha…
public static int getLength(String text) { // Java 8 return Optional.ofNullable(text).map(String::length).orElse(-1); // Pre-Java 8 // return if (text != null) ? text.length() : -1; } public static void print(String text) { // Java 8 Optional.ofNulla…
Java中可以添加ShutdownHook监听关闭事件,包括kill -15, control+c,terminal等信号.kill -9则接收不到. Runtime.getRuntime().addShutdownHook(new ShutdownThread()); 如果java运行在容器中,stop docker容器时,容器内的java进程不一定能接收到kill事件. 原因主要是:dockerfile中 ENTRYPOINT 我们经常运行的脚本,在脚本中设置好java启动参数,再java…
1. 虾米关服 在这里插入图片描述 用了5年多的音乐软件就这么说关就关了,确实让人心里不好受 ,虽然再去一个新的app里,让它们的算法熟悉你的喜好也不是很困难,可我还是习惯虾米的界面.虾米现在可以支持全方位的导出自己的歌单.收藏等,可毕竟是使用了那么久的听歌app,这么久时间的播放记录,是没办法导到其他app的,而且虾米是一个偏小众的听歌软件,它特有的听歌氛围和环境,是其他听歌软件没法儿比的,更何况虾米音乐的推荐算法也是深得人心.太难受了-赶紧保存最近的听歌记录,封存起来. 虾米只开放了最近10…
变脸,川剧的一种表演形式,除了哄哄小孩,似乎别无用处.而川剧变脸从业者何其多也,存在时间何其长也.以如此多的从业者,如此长的时间,来进行科研,其成果一定是斐然吧.推而广之,试问天下谁能敌! 微软变脸,足以改变世界.这次变脸,不仅是形式上的,而且是骨子里的.为适应手机.平板的性能苛求,其应用商店程序是建立在 WinRT 的基础上,而 WinRT 是建立在 COM 基础上.即面向对象,又拥抱底层,可谓鱼与熊掌兼得.不仅如此,其开发者许可,应用商店成立,无一不在显示微软的掌控能力.“天下英雄,尽入毂中…
2022年3月9日,MySQL重要分支Percona宣布,他们将停止与俄罗斯和白俄罗斯的组织开展新业务,直至另行通知. Percona为支持员工而采取的一些行动如下: 已经在乌克兰目前安全的部分获得了住房. 设立了一项基金,为家庭提供基本生活必需品并帮助他们摆脱伤害. 正在努力为受到这场战争负面影响的所有员工提供支持--俄罗斯人和乌克兰人都是如此. 正在为那些在乌克兰志愿服兵役或被征召入伍的人提供工作保障 PG考试相关详情:http://www.pgccc.com.cn/…
化学中我们得知「氢气加氧气在点燃的情况下会生成水」. 生活中我们得知「良辰加美景的情况下会得到千金春宵一刻」. 技术上又何尝不是如此呢?先假设一个场景:BOSS 让你实现一个服务监控的指挥室,能看到每个服务器的磁盘剩余空间,能看到...能看到... 其实讲真,实现思路有很多,但是不管黑猫白猫能抓住老鼠都是好猫,今天我们尝试用 Java 与 Shell 搭配一下,看看是否会产生惊奇的反应. 1.  首先通过 JDK 源码,品一品 Runtime 这杯美酒. 上图是摘取 JDK 中 Runtime…
1.Eureka 注册中心三种角色. 答:a.Eureka Server,注册中心,通过 Register.Get.Renew 等接口提供服务的注册和发现. b.Application Service (Service Provider),服务提供方,把自身的服务实例注册到 Eureka Server中. c.Application Client (Service Consumer),服务调用方,通过 Eureka Server获取服务列表,消费服务. 2.Erueka的架构图,如下所示.来源:…
  因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Spring-IOC实现[01-XML配置方式] Spring-IOC实现[02-XML配置方式案例] Spring-IOC实现[03-其他实现方式] Java代理模式-AOP必备知识 Spring之AOP详解 Spring之事务管理 Spring事务的传播行为 Spring事务的隔离级别 2.扩展内容…
一.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. 1.Eureka组件 Eureka包含两个组件:Eureka Server和Eureka Client. 1.1 Eureka Server Eureka Server提供服务注册服务,…
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串.路由信息等.服务注册中心是微服务架构中最基础的设施之一. 在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo 是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用,它提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心. 什么是注册中心 注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务地址的映射关系.在分布式架…
什么是 Ribbon Ribbon 是一个基于 HTTP 和 TCP 的 客服端负载均衡工具,它是基于 Netflix Ribbon 实现的. 它不像 Spring Cloud 服务注册中心.配置中心.API 网关那样独立部署,但是它几乎存在于每个 Spring Cloud 微服务中.包括 Feign 提供的声明式服务调用也是基于该 Ribbon 实现的. Ribbon 默认提供很多种负载均衡算法,例如轮询.随机等等.甚至包含自定义的负载均衡算法. Ribbon 解决了什么问题 Ribbon 提…
第一章 注册中心介绍 1.1.什么是注册中心 注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务地址的映射关系.在分布式系统中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用.简单的来说:服务注册中心的作用就是服务的注册和服务的发现. 1.2.为啥用注册中心 了解了什么是注册中心,那么我们继续谈谈,为什么需要注册中心.在分布式系统中,我们不仅仅是需要在注册中心找到服务和服务地址的映射关系这么简单,我们还需要考虑更多更复杂的问题: 服务注册后,如何…
欢迎关注公众号:bin的技术小屋,阅读公众号原文 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景 中笔者为大家详细介绍了 Netty 在处理连接关闭时的完整过程,并详细介绍了 Netty 如何应对 TCP 连接在关闭时会遇到的各种场景. 在连接关闭之后,接下来就轮到 Netty 的谢幕时刻了,本文笔者会为大家详尽 Java 技术栈中间件中关于优雅停…
Java 应用优雅停机 我们首先考虑下,一般在什么场景下数据会丢失呢? 升级服务时 pod重启时 服务器断电时 因为服务器断电属于极端情况,我们暂且不考虑.那就只有 Java 退出时我们要保证数据的完整性了.在 Java 中,有一个方法可以实现应用退出时候的优雅停机:shutdown hook.Spring boot把这个东西封装了一下,可以通过 @PreDestroy 注解实现.当 JVM 收到退出的信号时,会调用 shutdown hook 中的方法,完成清理操作.示例代码如下: Runti…
当大潮退去,才知道谁在裸泳..关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中间件等小而美的专栏供以学习哦. 目录 前言 关于版本号 正文 简单回忆2.2版本的新特性 主要新特性 优雅停机 配置属性的调整 删除不推荐使用的类/方法/属性 配置文件位置支持通配符 web下的日期转换支持配置 其它新特性 更改某些依赖最低版本要求 核心依赖升级 三方库依赖升级 Spring Da…
在jdk1.5的版本中,java提供了语言级别的线程池,对于需要使用线程池的业务系统和中间件框架等提供了方便的选择.我认为线程池主要有两个方面的作用:第一就是防止因为外部条件的变化,造成线程数的瞬间飙升,从而影响了正常的业务使用:第二就是提高线程的利用率,从而在性能上带来好处,例如在NIO模型中,工作线程池中只用了很少的线程,但却可以服务大量的连接. demo源码:https://github.com/mantuliu/javaAdvance 网上有很多介绍线程池的文章,在这里我就不讲线程池的细…
本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多线程自己实现,可以通过阻塞队列直接实现消息的分发和消费,方便简单,降低了开发难度,在本章的最后,我们在分析阻塞队列源码时,也会有demo展示因为对代码的不了解而错误的使用阻塞队列时的灾难情况.下面列举出了所有实现BlockingQueue接口的队列:ArrayBlockingQueue.Linked…
对于运行良好的游戏来说,停服一分就会损失很多收益.因为有些小bug就停服就划不来了.在使用Java开游戏服务器时,JVM给我们提供了一些接口,可以简单做一些热更新.修复一些小Bug而不用重启服务. JVM可以给运行中的服务器绑定一个代理,在这个代理中可以拿到Instrumentation 这个类的实例,它可以让用户手动修改jvm中的class类,对它进行热更新,但是有一点,用于热更新的新类和老的类方法签名必须一样,即不能修改方法的名字,参数类型,还有修改声明的字段.只能修改方法体里面的代码.一般…
2017-2018-1 Java小组-1623 第二周作业 关于游戏软件的问题 讨论结果 20162301张师瑜 20162305李昱兴 20162306陈是奇 20162308马平川 20162310林臻 20162314王译潇 关于游戏软件的问题: 讨论结果: 张师瑜-开心消消乐 1.① <开心消消乐>是一款由乐元素公司开发的三消类休闲游戏.2013年8月,<开心消消乐>PC版登陆Q-zone及QQ游戏大厅:2014年初,<开心消消乐>iOS版及Android版陆续…