在Spring 3.2之前,在Spring MVC应用程序中处理异常的两种主要方法是:HandlerExceptionResolver或@ExceptionHandler注释。这两个都有一些明显的缺点。3.2之后,我们现在有了新的@ControllerAdvice注释来解决前面两个解决方案的局限性。所有这些都有一个共同点 - 他们处理分离问题非常好。应用程序可以正常抛出异常以指示某种类型的异常 - 然后将单独处理异常。

解决方案1 - 控制器级别@ExceptionHandler

在@Controller class中定义一个方法来处理异常, 并加上@ExceptionHandler annotation:

1
2
3
4
5
6
7
8
@RestController
public class FooController{
//...
@ExceptionHandler({ CustomException1.class, CustomException2.class })
public void handleException() {
//
}
}

主要缺点: @ExceptionHandler注释方法只对该该Controller有效, 不能全局使用。

阅读全文 »

upload successful

在平时的开发过程中,大家一定遇到在修改某个类或者配置文件后需要手动重启应用程序才会生效的情况,可能大家对这样的事情也感到比较的烦。其实Springboot为了使应用程序的开发比较方便快捷,提供了一些额外的工具(spring-boot-devtools),其中就包括快速重启。接下来,我们介绍如何使用spring-boot-devtools。

如何使用

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 防止传递 -->
<optional>true</optional>
</dependency>

需要说明的是,运行完全打包应用程序时,开发人员工具会自动禁用。如果应用程序通过java -jar启动,会被认为是生产应用。

阅读全文 »

概要

随着DevOps理念不断的传播,大部分IT从业者对于DevOps本身也有了一定的了解和认识,然而企业内部想根据DevOps思想实践,这并不是一件很简单的事情。一方面由于企业内部的历史环境以及组织结构问题,另外一方面因为业界并没有一套标准的开源工具集可以借鉴(关于几家基于Docker创业的服务提供商暂时除外)。

那么该篇内容主要讲解如何借助开源工具结合CI/CD的场景,将Docker融入到部署单元中去,进行持续集成、测试到最终的持续部署,开发人员最终只需要去关注业务的访问入口就可以知道业务是否正常,并可以通过一系列的监控工具去及时发现业务异常。

在整个DevOps部署流水线中需要以下几个部分:CI部分、CD部分、服务调度(治理)部分、监控部分、日志部分。本篇文章将通过一个简单的go-web应用去进行基于Docker的CI/CD流水线的测试。

upload successful

阅读全文 »

SwitchHosts 是一款用于快速切换 hosts 文件的开源小程序,基于 MIT 协议开源。拥有Windows版, Linux版和Mac OS 版。基于 Electron 开发,同时使用了 React、Ant Design 以及 CodeMirror 等框架/库。需要 Node.js 环境。

upload successful

功能特性包括:

  • 快速切换 hosts
  • hosts 文件语法高亮
  • 在线/本地 hosts 方案选择
  • 系统托盘图标快速切换
  • Host文件编辑时,点击行号快速切换注释
  • macOS: 支持 Alfred workflow 快速切换

Website https://oldj.github.io/SwitchHosts
Github https://github.com/oldj/SwitchHosts

阅读全文 »

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

Swarm 认识

Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具。Docker 1.12 内嵌了 swarm mode 集群管理模式。

为了方便演示跨主机网络,我们需要用到一个工具——Docker Machine,这个工具与 Docker Compose、Docker Swarm 并称 Docker 三剑客,下面我们来看看如何安装 Docker Machine:

1
2
3
$ curl -L https://github.com/docker/machine/releases/download/v0.9.0-rc2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
阅读全文 »

upload successful
MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL、MariaDB 和 Percona,支持自动补全和语法高亮。它是使用 prompt_toolkit 库写的,需要 Python 2.7、3.3、3.4、3.5 和 3.6 的支持。MyCLI 还支持通过 SSL 安全连接到 MySQL 服务器。

MyCLI 的特性

  • 当你第一次使用它的时候,将会自动创建一个文件 ~/.myclirc。
  • 当输入 SQL 的关键词和数据库中的表、视图和列时,支持自动补全。
  • 默认情况下也支持智能补全,能根据上下文的相关性提供补全建议。

比如:

1
2
SELECT * FROM <Tab> - 这将显示出数据库中的表名。
SELECT * FROM users WHERE <Tab> - 这将简单的显示出列名称。
阅读全文 »

【摘要】网上有很多不错的Docker工具,大部分在github上都是开源的。最近两年,我一直在使用Docker,并将其应用到了一些开发项目上。如果你刚开始使用Docker,你会发现它能应用到的实例远远多于预想。Docker能为你做更多,不会让你失望的!

Docker社区非常活跃,每天都有许多新的实用工具出现。因此,天天去检查更新,试图跟上社区的步伐确实有点困难。所以我在此分享在工作中收集到的一些有趣而实用的Docker工具,帮助大家提高日常工作效率。

下面开始一一介绍我在使用Docker的过程中找到的有用工具吧。

watchtower:自动更新Docker容器

watchtower监视容器运行过程,并且能够捕捉到容器中的变化。当watchtower检测到有镜像发生变化,会自动使用新镜像重启容器。我在本地开发环境中创建的最后一个镜像就用到了watchtower。

阅读全文 »

我相信当我们意识到重要且敏感的访问信息已经暴露到公共网络上,并可能使您的微服务无条件被访问。随着我们依赖于的开发出来的服务化的量不断增加, 这时跟踪敏感细节的数量也有所增加。为了应对这个问题,在“secrets managemen”领域出现了工具。

在这篇文章中,我们将看Docker Secrets,要求在Docker 1.13及更高版本的新秘密管理功能。

从Docker的角度来看,该功能不需要太多的工作,但是您可能需要重构应用程序以利用它。我们将介绍如何做到这一点的想法,但不是详细的。

Docker的 Secrets只适用于Docker群集,主要是因为这是秘密管理最有意义的领域。毕竟,Swarm是针对多个Docker实例需要在他们之间共享访问细节的生产用途。如果要在独立容器中使用秘密管理,则需要运行

scale值设置为1 的容器。适用于Mac和Windows的Docker不支持多节点群集模式,但您可以使用它们使用Docker Machine创建多节点群集。

阅读全文 »

几乎所有用过Kubernetes的人都会发现其缺点,随着大K在负载平衡和工作管理方面的重大改进,用户可以将注意力逐渐转移到其他地方了,这里有四个项目可以减轻Kubernetes集群管理的负载。

Kubernetes

Kube-applier

Kubernetes成功的关键是其与除Google以外的IT厂商和产品的接触。云存储公司Box收购了Kubernetes,并开放了一些用于帮助其内部部署的项目,kube-applier就是这样一个项目。

作为Kubernetes服务运行的Kube-applier,为Gube仓库中托管的Kubernetes集群提供了一组声明性配置文件,并将其持续应用于集群中的pod。无论何时对定义文件进行任何更改,它们都将被自动提取并应用于相关的pod。

阅读全文 »

Java 9 中的 9 个新特性

upload successful

Java 8 发布三年多之后,即将快到2017年7月下一个版本发布的日期了。 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新。 这里有九个令人兴奋的新功能将与 Java 9 一起发布。

Java 平台级模块系统

Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面对两个基础的问题: 很难真正地对代码进行封装, 而系统并没有对不同部分(也就是 JAR 文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到, 这样就会导致无意中使用了并不想被公开访问的 API。此外,类路径本身也存在问题: 你怎么知晓所有需要的 JAR 都已经有了, 或者是不是会有重复的项呢? 模块系统把这俩个问题都给解决了。

阅读全文 »