初次看到Spring Boot的时候就被它的特性震惊了,一下子就爱上它了。
由于公司的系统和用户规模扩展,从3年前的3台服务器到现在60多台服务器,遇到了《淘宝技术这十年》中遇到的很多问题。我们需要站着巨人的肩上,于是,开始关注起Spring Boot。Spring Boot使开发独立的,生产级别的Spring的应用变得非常简单。它总结了一揽子的约定和规范建议,而且注重生产级别的开发。提供一系列大型项目常用的非功能性特征(比如,内嵌服务器,安全,指标,健康检测,外部化配置)。
Spring Boot是由Pivotal团队提供,它在tweet上发布了一个使用Spring Boot可以运行的web项目。要知道tweet是140个字的限制。
系统要求
Spirng Boot有一定的系统要求。比如Spring Boot 1.2.5.RELEASE需要java 7 + 、 Spring Framework 4.1.5 + 、Maven 3.2 + or Gradle 1.12+。如果可能,最好使用java8.
Hello World
开发人员总是需要不断的写”Hello World!”这个单词,因为我们需要不断的学习新技术。
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Spring Boot Example
*
* @author ouyang
* @since 2015-07-03 12:44
*/
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
@RestController
和@RequestMapping
是SpringMVC注解。
@EnableAutoConfiguration
告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring,spring-boot-starter-web
添加了tomcat和Spring MVC,auto-configuration将假定你正在开发一个web应用并相应地对Spring进行一些默认设置。
贴下mavne pom.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ouyang</groupId>
<artifactId>example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--父类 Spring Boot的版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
</parent>
<!--这是一个web应用-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--Spring Boot Maven插件 好东西-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring-boot-starter-parent
会选择相对保守的java版本,最好添加一下java的版本属性。
<properties>
<java.version>1.8</java.version>
</properties>
应用程序的入口是main,通过调用run,将业务委托给了Spring Boot的SpringApplication
类,SpringApplication
将引导应用,启动Spring,相应的启动被自动配置的Tomcat Web服务器。Example.class
作为参数告诉SpringApplication是Spring的主要组件。为了暴露任何的命令行参数,args数组也会被传递过去。args在具体的生成环境将有重要作用。
运行(第一次,下载jar包是个漫长的过程,而且没代理,速度慢):
mvn spring-boot:run
或者通过自己在IntelliJ IDEA或者其他IDE里面运行。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.2.4.RELEASE)
这是成功运行的一部分。
curl http://localhost:8080
Hello World!
actuator
什么代码都不加,就在pom.xml里面加上这个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
重新启动在浏览器上执行:
http://localhost:8080/metrics
你会看到
{
mem: 321536,
mem.free: 193452,
processors: 4,
instance.uptime: 315607,
uptime: 366031,
systemload.average: -1,
heap.committed: 321536,
heap.init: 124928,
heap.used: 128083,
heap: 1773568,
threads.peak: 16,
threads.daemon: 14,
threads: 16,
classes: 7697,
classes.loaded: 7698,
classes.unloaded: 1,
gc.ps_scavenge.count: 8,
gc.ps_scavenge.time: 252,
gc.ps_marksweep.count: 2,
gc.ps_marksweep.time: 317,
httpsessions.max: -1,
httpsessions.active: 0,
counter.status.200.env: 1,
counter.status.200.info: 1,
gauge.response.env: 31,
gauge.response.info: 193
}
更多可用的请求,比如
http://localhost:8080/health
health可以用来检查应用的运行状态。它经常被监控软件用来提醒人们生产系统是否停止。health端点暴露的默认信息取决于端点是如何被访问的。对于一个非安全,未认证的连接只返回一个简单的’status’信息。对于一个安全或认证过的连接其他详细信息也会展示。想了解更多的细节就需要更加深入的了解了。
下面这些都是可用的一些监控:
ID | 描述 | 敏感(Sensitive) |
---|---|---|
autoconfig | 显示一个auto-configuration的报告,该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因 | true |
beans | 显示一个应用中所有Spring Beans的完整列表 | true |
configprops | 显示一个所有@ConfigurationProperties的整理列表 | true |
dump | 执行一个线程转储true | |
env | 暴露来自Spring ConfigurableEnvironment的属性 | true |
health | 展示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情) | false |
info | 显示任意的应用信息 | false |
metrics | 展示当前应用的’指标’信息 | true |
mappings | 显示一个所有@RequestMapping路径的整理列表 | true |
shutdown | 允许应用以优雅的方式关闭(默认情况下不启用) | true |
trace | 显示trace信息(默认为最新的一些HTTP请求) | true |
debug
如果希望了解的更多一些,必须要试试这个参数 --debug
--debug
暂时结束
这只是一个最基本和初步的介绍,一个Hello World而已。
附:支持开箱即用(out of the box)的servlet的容器
名称 | Servlet版本 | Java版本 |
---|---|---|
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3.0 | Java 6+ |
Jetty 9 | 3.1 | Java 7+ |
Jetty 8 | 3.0 | Java 6+ |
Undertow | 1.1 | 3.1 Java 7+ |