Spring BootEnvironment Setup and basicconcepts

LearningSpring Boot basicconcepts, includingEnvironment Setup, projectstructure and corefeatures

1. Spring BootIntroduction

Spring Boot is 由Pivotal团队Development 一个open-sourceframework, 用于简化Springapplication creation, configuration and deployment过程. 它基于Springframework, providing了自动configuration, 起步依赖, produce就绪functionsetc.features, 使Development者able to fast 速构建独立 , produce级别 Springapplication.

1.1 Spring Boot 特点

  • 自动configuration: 根据classpath on 依赖自动configurationSpringapplication, reducing手动configuration
  • 起步依赖: providing一系列starter依赖, 简化依赖management
  • 独立run: 可以creation可执行 JARfile, 无需 out 部applicationserver
  • produce就绪: in 置healthycheck, 指标monitor, out 部化configurationetc.produce级functions
  • 无code生成 and XMLconfiguration: reducing样板code, improvingDevelopmentefficiency
  • and Spring生态集成: 无缝集成Spring MVC, Spring Data, Spring Securityetc.Spring生态component

1.2 Spring Boot core优势

  • 简化Development流程, improvingDevelopmentefficiency
  • reducingconfigurationerror, improvingsystem stable 性
  • 便于test and deployment
  • providing丰富 produce级functions
  • community活跃, documentation丰富

2. Environment Setup

in 开始usingSpring Boot之 before , 我们需要搭建Developmentenvironment. 以 under is 详细 步骤:

2.1 installationJDK

Spring Boot需要JavaDevelopmentenvironment, 推荐usingJDK 8 or 更 high version.

  • Windows: from Oracle官网 or AdoptOpenJDK under 载JDKinstallationpackage, runinstallation程序
  • macOS: usingHomebrewinstallation: brew install openjdk@11
  • Linux: usingsystempackagemanagement器installation, such asUbuntu: sudo apt-get install openjdk-11-jdk

2.2 verificationJDKinstallation

installationcompletion after , 打开终端 (Windows on is commands提示符 or PowerShell) , 输入以 under commandsverificationJDK is 否installation成功:

java -version

such as果显示Javaversion号 (such asjava version "11.0.8") , 则说明installation成功.

2.3 installationMaven or Gradle

Spring Bootproject可以usingMaven or Gradlefor构建. 以 under is installation步骤:

2.3.1 installationMaven

  • Windows: from Maven官网 under 载压缩package, 解压 to 合适 Table of Contents, 并configurationenvironmentvariable
  • macOS: usingHomebrewinstallation: brew install maven
  • Linux: usingsystempackagemanagement器installation, such asUbuntu: sudo apt-get install maven

verificationMaveninstallation:

mvn -version

2.3.2 installationGradle

  • Windows: from Gradle官网 under 载压缩package, 解压 to 合适 Table of Contents, 并configurationenvironmentvariable
  • macOS: usingHomebrewinstallation: brew install gradle
  • Linux: usingsystempackagemanagement器installation, such asUbuntu: sudo apt-get install gradle

verificationGradleinstallation:

gradle -version

2.4 installationIDE

推荐using以 under IDEforSpring BootDevelopment:

  • IntelliJ IDEA: providingSpring Boot插件, support自动补全, code生成etc.functions
  • Eclipse: installationSpring Tools 4插件, supportSpring BootDevelopment
  • VS Code: installationSpring Boot Extension Pack插件

3. creation第一个Spring Bootproject

我们可以through many 种方式creationSpring Bootproject:

3.1 usingSpring Initializr

Spring Initializr is 官方providing project生成tool, 可以through网页, IDE or commands行using.

3.1.1 网页方式

  1. 访问https://start.spring.io/
  2. 选择projectclass型 (Maven/Gradle) , language (Java/Kotlin/Groovy) , Spring Bootversion
  3. 填写projectinformation (Group, Artifact, Nameetc.)
  4. 选择依赖 (such asSpring Web, Spring Boot DevToolsetc.)
  5. 点击"Generate"按钮 under 载project压缩package
  6. 解压压缩package, usingIDE打开project

3.1.2 IDE方式 (IntelliJ IDEA)

  1. 打开IntelliJ IDEA, 点击"File" -> "New" -> "Project"
  2. 选择"Spring Initializr", 点击"Next"
  3. 填写projectinformation, 选择Spring Bootversion, 点击"Next"
  4. 选择依赖, 点击"Next"
  5. 选择projectstore位置, 点击"Finish"

3.1.3 commands行方式

usingcurlcommandscreationproject:

curl https://start.spring.io/starter.zip -d dependencies=web,devtools -d bootVersion=2.5.4 -d javaVersion=11 -o myproject.zip

3.2 projectstructure

一个典型 Spring Bootprojectstructuresuch as under :

myproject/       # project根Table of Contents
├── src/          # sourcescodeTable of Contents
│   ├── main/     # 主codeTable of Contents
│   │   ├── java/ # Javasourcescode
│   │   │   └── com/example/myproject/ # packageTable of Contents
│   │   │       ├── MyprojectApplication.java # application主class
│   │   │       └── ... # otherJavaclass
│   │   └── resources/ # resourcefile
│   │       ├── application.properties # applicationconfiguration
│   │       ├── static/ # 静态resource
│   │       └── templates/ # 模板file
│   └── test/     # testcodeTable of Contents
│       ├── java/ # testJavacode
│       └── resources/ # testresourcefile
├── pom.xml       # Mavenconfigurationfile (such as果usingMaven) 
└── gradle/       # GradleconfigurationTable of Contents (such as果usingGradle) 

3.3 application主class

Spring Bootapplication 主class is package含@SpringBootApplication注解 class, 它 is application 入口点:

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyprojectApplication {

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

}

@SpringBootApplication is a 复合注解, package含以 under 三个注解:

  • @SpringBootConfiguration: 标记该class for configurationclass
  • @EnableAutoConfiguration: 启用自动configuration
  • @ComponentScan: 启用component扫描

3.4 runapplication

可以through以 under 方式runSpring Bootapplication:

3.4.1 IDE方式

in IDEin找 to 主class, right 键点击, 选择"Run" or "Debug".

3.4.2 commands行方式

usingMavenrun:

mvn spring-boot:run

usingGradlerun:

gradle bootRun

3.4.3 打packagerun

先打packageapplication, 再runJARfile:

# usingMaven打package
mvn clean package

# usingGradle打package
gradle clean build

# runJARfile
java -jar target/myproject-0.0.1-SNAPSHOT.jar

3.5 creation一个 simple REST API

in 主classwherepackage under creation一个控制器class:

package com.example.myproject;

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

@RestController
public class HelloController {

    @GetMapping("/")
    public String hello() {
        return "Hello, Spring Boot!";
    }

}

runapplication after , 访问http://localhost:8080/, 你将看 to "Hello, Spring Boot!" 输出.

4. Spring Bootcorefeatures

4.1 自动configuration

Spring Boot根据classpath on 依赖自动configurationSpringapplication. 例such as, such as果classpath on has Spring Web依赖, 它会自动configurationDispatcherServlet, Tomcatetc.Webcomponent.

4.2 起步依赖

起步依赖 is 一组预configuration 依赖, 简化了依赖management. 例such as, spring-boot-starter-webpackage含了DevelopmentWebapplication所需 所 has 依赖.

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

4.3 in 置Webserver

Spring Boot in 置了Tomcat, Jetty and Undertow三种Webserver, 默认usingTomcat. 我们可以 in 依赖in排除默认server, 添加otherserver:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

4.4 out 部化configuration

Spring Bootsupport many 种 out 部化configuration方式, includingapplication.properties, application.yml, environmentvariable, commands行parameteretc..

example: in application.propertiesinconfiguration端口号:

server.port=8081

or in application.ymlinconfiguration:

server:
  port: 8081

4.5 produce就绪functions

Spring Bootproviding了一系列produce级functions:

  • healthycheck: through/actuator/health端点查看applicationhealthystatus
  • 指标monitor: through/actuator/metrics端点查看application指标
  • information端点: through/actuator/info端点查看applicationinformation
  • environmentvariable: through/actuator/env端点查看environmentvariable
  • logconfiguration: through/actuator/loggers端点动态调整log级别

要启用这些functions, 需要添加spring-boot-starter-actuator依赖, 并 in configurationfilein暴露端点:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management.endpoints.web.exposure.include=*