美文网首页
Spring Boot - 初探

Spring Boot - 初探

作者: yuanzicheng | 来源:发表于2017-07-30 22:18 被阅读32次

在以往以及当前的Java开发工作中,Spring这个一站式框架发挥了重要的作用。

然而,当我们的项目越来越复杂的时候,铺天盖地的xml配置让我们无比烦躁,配置稍有不慎就会引起极大麻烦。究其原因,为什么要使用xml文件读取配置呢,只能说这是框架本身的一种约定,要使用框架(或者其它规范,比如Servlet)就必须遵循它的约定。那么既然是约定,为什么不把约定变得更为简洁呢,Spring Boot的出现解决了这个问题。

Spring Boot舍弃了以往基于xml方式的配置方式,我们可以采用.properties、.yml等方式快速配置需要的项。当然这只是Spring Boot的众多特点之一。

Features

  • 创建独立的Spring应用程序
  • 内嵌Tomcat、Jetty或Undertow(无需部署.war文件)
  • 提供自有的'starter'以简化Maven/Gradle依赖配置
  • 尽可能地自动配置Spring
  • 提供为生产准备的功能,如metrics,health checks,externalized configuration
  • 绝对无代码生成,无需xml配置

快速开始

http://start.spring.io提供了一键构建及下载功能,得到的项目结构如下:

.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               └── DemoApplication.java
    │   └── resources
    │       └── application.properties
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

14 directories, 8 files

build.gradle配置如下,其中spring-boot-starter-web提供了web项目的依赖(如果是非web项目,则不需要此依赖)

buildscript {
    ext {
        springBootVersion = '1.5.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

DemoApplication.java是程序的入口,仅需要加上@SpringBootApplication注解,并在mian方法中执行

SpringApplication.run(DemoApplication.class, args);

Spring Boot自动执行初始化;

如果是web项目,只需要添加spring-boot-starter-web依赖,并在类上加上@Controller@RestController注解即可,无需任何配置(Spring Boot已经提供了默认配置,除非你不想使用默认配置)

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "Hello Spring Boot";
    }
}

如果是非web项目,启动时需要执行代码的话需要实现CommandLineRunner接口,否则只能执行静态方法

@SpringBootApplication
public class SpringbootApplication implements CommandLineRunner{

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        test();
    }

    public void test(){
        System.out.println("test");
    }
}

启动

使用Gradle构建的Spring Boot项目打包、启动都非常简单

$ gradle build

还可以使用-x test参数跳过junit单元测试

$ gradle build -x test

通过gradle build生成jar后,就可以使用java -jar来运行了

$ java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

如果启动时需要设置JVM参数

java -Xms512m -Xmn512m -Xmx2g -jar build/libs/demo-0.0.1-SNAPSHOT.jar

以java -jar方式启动应用是在交互模式下运行的,退出命令行应用就会中止,如果希望以后台方式运行应用程序,可以使用nohup命令执行(MacOS及Linux环境下),并加上&
nohup命令会将输出重定向到当前目录的nohup.out文件中,如果当前目录的nohup.out文件没有创建或者写入权限,则会输出重定向到~/nohup.out。

$ nohup java -jar bulid/lib/demo-0.0.1-SNAPSHOT.jar &

还可以使用bootRun一键启动

$ gradle bootRun

停止

关于如何优雅地停止Spring Boot应用,可以参考下面这篇文章。
SpringBoot 实战 之 优雅终止服务

单元测试

常规的单元测试比较简单,这里演示下MVC的测试,使用MockMvc来模拟请求,将期望的返回结果与实际放回结果比较。

import static org.hamcrest.core.IsEqual.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {

    private MockMvc mvc;

    @Before
    public void init() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
    }

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello")
            .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                    .andExpect(content().string(equalTo("Hello Spring Boot")));
    }

}

相关文章

  • Spring Boot - 初探

    在以往以及当前的Java开发工作中,Spring这个一站式框架发挥了重要的作用。 然而,当我们的项目越来越复杂的时...

  • spring boot初探

    spring boot简介 百科简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用...

  • Spring Boot初探

    开启热部署 加Maven依赖 开启热部署

  • springboot(二)原理初探

    原理初探 自动装配 spring-boot-dependencies:核心依赖在父工程中! 我们在写或者引入一些s...

  • Spring Boot初探(0)

    整理...

  • Spring-boot初探

    看过,两三天就忘了;写下,可以记很久,还可以回顾。 ---题记 一,eclipse安装 STS插件 help - ...

  • Spring Boot and RabbitMQ 初探

    概述 今天给大家分享以下三部分内容: Docker 安装 RabbitMQ Spring Boot and Rab...

  • 教程

    Spring Boot 入门 Spring Boot Controller Spring Boot Servlet...

  • SpringBoot 入门

    Spring Boot 入门 1、Spring Boot 简介 Spring Boot 是为了简化 Spring ...

  • Spring Boot Admin实现服务监控

    Spring Boot Admin简介 SBA 全称 Spring Boot Admin Spring Boot ...

网友评论

      本文标题:Spring Boot - 初探

      本文链接:https://www.haomeiwen.com/subject/hjwqlxtx.html