本项目代码地址:demo-world  (spring-boot-demo模块)

这里是spring-boot模块的第一期文章,主要来讲一下spring-boot是什么?怎么用?为什么要用?

1.What is SpringBoot?

官方文档开头说明了这个项目的目的:

Our primary goals are:

  • Provide a radically faster and widely accessible getting-started experience for all Spring development.
  • Be opinionated out of the box but get out of the way quickly as requirements start to diverge from the defaults.
  • Provide a range of non-functional features that are common to large classes of projects (such as embedded servers, security, metrics, health checks, and externalized configuration).
  • Absolutely no code generation and no requirement for XML configuration.

简而言之,spring-boot具有一下几个特点:

  • 使用大量的默认配置代替手动配置,(如果有特别需要个别项也可以自定义配置)
  • 使用.yml代替xml配置,增加了配置的可读性
  • 内置tomcat,因此可以使用jar包部署,不必使用war包(也不需要额外的tomcat环境)

2.一个极简的SpringBoot项目:

接下来我将用三段代码(本例的全部代码)来呈现有个项目:

首先是maven的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.swing</groupId>
    <artifactId>spring-boot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

然后是一个接口:

@RestController
@RequestMapping("/first")
public class FirstController {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
}

最后是项目的启动入口:

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        System.out.println("启动成功啦!");
    }
}

OK ! 这就是用Spring Boot 搭建的一个web项目的全部了,炒鸡简单吧!甚至我们连tomcat都不需要了

spring是如何做到这一点的呢?答案在 @EnableAutoConfiguration注解中(此注解包含在@SpringBootApplication注解中)官方文档对它的解释是:

The second class-level annotation is @EnableAutoConfiguration. This annotation tells Spring Boot to “guess” how you want to configure Spring, based on the jar dependencies that you have added. Since spring-boot-starter-web added Tomcat and Spring MVC, the auto-configuration assumes that you are developing a web application and sets up Spring accordingly.

总的来说,springBoot会根据你的依赖自动揣摩你这大概是个什么类型的项目,然后使用一些常用的配置来配置此项目(例如需要使用 tomcat ,默认端口为8080等)

接下来讨论一下主方法,这是项目的运行入口,通过调用run委托给Spring Boot的SpringApplication类。run方法的args参数意在获取运行时传入的参数,例如使用 --spring.profiles.active 指定运行环境(开发,测试,部署)

3.更自由的配置springBoot

体验过上面的快捷配置,但仔细想想,是否有一种配置可以在简便的同时更加自由,确实有,那就是 使用application.yml

官网为我们给出给出了所有的默认的配置:链接  (当然,这里面不包括一些第三方的框架对spring-boot的支持,例如spring-boot-mybatis等)

扩展一点:上面提到过一个运行环境(dev,test,prod),项目在不同环境下运行需要不同的 application.yml 配置,我们通常使用如下配置文件名:

  • applicaiton-dev.yml
  • application-test.yml
  • application-prod.yml

当需要指定某一个运行环境时候,只需要如下写法即可:

java -jar (要运行的jar包地址)--spring.profiles.active=dev