开始使用Spring Boot

初次看到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 83.1Java 7+
Tomcat 73.0Java 6+
Jetty 93.1Java 7+
Jetty 83.0Java 6+
Undertow1.13.1 Java 7+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值