Docker系列(一):Linux 环境下安装 Docker

Docker 的构想是要实现Build,ship and Run Any App, Anywhere,即通过对应用的封装(Packaging)、分发(Distribution),部署(Deployment),运行(Runtime)生命周期进行管理,达到应用组件 一次封装,到处运行 的目的。

这里的应用组件,可以是一个Web应用,一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。   

阅读更多

Spring(十一):Spring Bean 是线程安全的吗?

Spring 中的默认为所有申明为 Bean 的对象创建一个实例存放到IoC容器进行管理的,这些Bean对象对于多线程来说是共享的,所以严格来说 Spring Bean 是非线程安全的。Spring 本身就没有对 bean 的多线程安全问题做出任何保证与措施。   

阅读更多

Spring MVC SSE-服务端推送技术

  Web 项目中,浏览器与服务器是通过请求响应来实现功能功能交互的,当服务端出现新的信息需要让前端知道时,就需要用到服务器推送技术。

  服务端推送技术有基于SSE(Server Send Event 服务端发送事件)的服务器端推送,该方式需要浏览器支持,而目前主流浏览器最近版本基本都支持;基于Servlet 3.0+的异步方法特性;WebSocket双向通信技术。

阅读更多

Spring MVC 注解之 @ControllerAdvice 实现全局异常处理

通常会在 @Controller 注解作用的类的方法上使用@ExceptionHandler,@ModelAttribute,@InitBinder来处理异常或初始化绑定,这三个注解对所用使用了 @RequestMapping 注解的控制器内的方法有效。

如果希望此类方法在全局范围内(跨控制器)应用,则可以在带有 @ControllerAdvice@RestControllerAdvice 注解的类中声明它们这三个注解。

@ControllerAdvice用于声明一个 控制器 建言,作用在类上,可以将控制器的全局配置统一放置在该注解作用的类里,结合在方法上使用 @ExceptionHandler 注解,就能实现全局的异常控制。

阅读更多

Log4j2:log4j2.xml 配置示例和异步日志详解

Log4j2配置:log4j2.xml文件示例配置; Log4j2 官方文档

译:Log4j2 > Configuration

将日志请求插入应用程序代码需要相当大的计划和精力。观察表明,大约4%的代码用于日志记录。因此,即使是中等规模的应用程序,它们的代码中也会嵌入数千个日志语句。考虑到它们的数量,必须管理这些日志语句,而无需手动修改它们。

Log4j 2的配置可以通过以下四种方式之一完成:

  • 通过以XML、JSON、YAML或属性格式编写的配置文件。
  • 通过编程方式创建ConfigurationFactory和Configuration实现。
  • 通过调用Configuration接口中公开的API来添加组件到默认配置。
  • 通过调用内部Logger类的方法进行配置。
阅读更多

错误:java.lang.ClassNotFoundException-javax.el.ELManager

Maven 项目,pom.xml文件装配的是 tomcat7-maven-plugin插件,但项目中使用了Servlet 3.0的特性。此情况下如果项目使用Maven跑,则会报错:java.lang.ClassNotFoundException: javax.el.ELManager

javax.el.ELManager这个包在Tomcatlib库里是存在的,真实的报错原因是Tomcat 7里的该包的版本低了,满足不了项目里对Servlet 3.0特性的支持。而Servlet 3.0 + 至少需要Tomcat 8或更高的版本才能支持。

解决:因到目前为止没有Tomcat 8Maven插件,所在需要在pom.xml里添加更高版本的依赖:

1
2
3
4
5
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
阅读更多