Spring Boot-01-通过一个项目快速入门

官方参考文档:Spring Boot Reference Documentation 

0. 概述 

Spring的缺点:

1. 配置繁琐:虽然Spring的组件代码是轻量级,但它的配置却是重量级的。
2. 依赖繁琐:项目的依赖管理也是一件耗时耗力的事情。分析要导入哪些库的坐标、与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
这些问题Spring Boot可以解决,Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式,底层依然是Spring。基于约定优于配置的思想,不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中。

Spring Boot功能:

1. 自动配置:运行时过程,按需自动配置Spring以及第三方库。约定大于配置:每个场景都有很多默认配置。自定义:配置文件中修改几项即可。
2. 起步依赖:依赖传递
起步依赖本质上是一个Maven项目对象模型(ProjectObject Model,POM),定义了对其他库的传递依赖这些东西加在一起即支持某项功能。
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
3. 直接嵌入Tomcat、Jetty or Undertow(无需部署 war 包)【Servlet容器】,将应用打成jar包,有java运行环境即可。
4. 提供可选的starter场景启动器,简化应用整合。如果要使用web、json、邮件、oss(对象存储)、异步、定时任务、缓存...,要导包一堆,控制好版本。Springboot为每一种场景准备了一个依赖; web-starter。mybatis-starter,只需导入这一个依赖即可。
5. 提供生产级特性:如监控指标、健康检查、外部化配置等
6. 无代码生成、无xml

一、Spring Boot 快速入门项目

搭建SpringBoot工程,定义HelloController.hello()方法,返回”Hello SpringBoot!”,定义引导类,启动Springboot应用。

1. 创建Maven项目、目录结构

2. 导入SpringBoot起步依赖:pom.xml

<!--    所有springboot项目都必须继承自 spring-boot-starter-parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.5</version>
    </parent>

    <dependencies>
        <!--        web开发的场景启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!--    SpringBoot应用打包插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

3. 定义Controller

只扫描主程序所在这个包及其子包,

package com.circle.boot.controller;

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

/**
 *
 * @author circle
 * @date 2024/4/6
 * @Description 控制类
 */

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

4. 编写引导类:springboot应用的入口

package com.circle.boot;

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

/**
 *
 * @author circle
 * @date 2024/4/6
 * @Description
 */

@SpringBootApplication //这是一个SpringBoot应用
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);  // Springboot启动代码
    }
}

5. application.properties配置文件

在resource目录下,由于我的8080端口被占用,在此处设置成其他端口。

server.port=8004

6. 启动测试

在浏览器输入:localhost:8004/hello

7. 打包

点击Maven,Lifecycle下的clean和package(按住ctrl同时选),将本项目打成jar包。

jar包位于target目录下:

在文件夹中找到target目录,进入cmd,执行命令:java -jar helloworld_01-1.0-SNAPSHOT.jar

E:\IntelliJ IDEA 2022.1.4\project\Springboot3_demo\helloworld_01\target>java -jar helloworld_01-1.0-SNAPSHOT.jar

即可运行我们的项目,必须在IDEA中先终止项目,否则显示端口被占用。

由此项目,我们可以体会到Springboot的特性:

1. 简化整合:场景启动器

只要导入相关的场景,就能拥有相关的功能。不用配一堆依赖!

默认支持的所有场景:Developing with Spring Boot

  • 官方提供的场景:命名为:spring-boot-starter-*
  • 第三方提供场景:命名为:*-spring-boot-starter
2. 简化开发:无需编写任何配置,直接开发业务
3. 简化配置:application.properties
  • 集中式管理配置。只需要修改这个文件就行 。
  • 配置基本都有默认值
  • 能写的所有配置都在: Common Application Properties
4. 简化部署:打包为可执行的jar包,只要有java环境即可。
5. 简化运维

修改配置(外部放一个application.properties文件)、监控、健康检查。


上述各步骤,还可以简化,不用手动创建各文件——>Spring Initializr 创建向导,一键创建好整个项目结构

还是new Module,但此时选择Spring Initializr:

需要什么,此处就选什么,create: 

目录结构如下,很多文件和内容都已经准备好:

Initializr02Application:主程序

resources/static:静态资源,图片、JS、CSS等

resource/template:页面模板

application.properties:配置文件

创建同样的控制类,相应hi

package com.circle.boot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 *
 * @author circle
 * @date 2024/4/6
 * @Description 
 */

@RestController
public class HelloController {
    @GetMapping("/hi")
    public String hello(){
        return "Hi,Spring Boot 3!";
    }
}

 启动测试:

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 07:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 07:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 07:40:02       87 阅读
  4. Python语言-面向对象

    2024-04-07 07:40:02       96 阅读

热门阅读

  1. React原理

    2024-04-07 07:40:02       114 阅读
  2. security如何不拦截websocket

    2024-04-07 07:40:02       50 阅读
  3. QToolTip设置背景色没有生效原因与解决方法

    2024-04-07 07:40:02       36 阅读
  4. 设计模式:迭代器模式

    2024-04-07 07:40:02       41 阅读
  5. C/C++中decltype关键字用法总结

    2024-04-07 07:40:02       202 阅读
  6. 内网安全之域内密码喷洒

    2024-04-07 07:40:02       44 阅读
  7. spring-web 请求调度流程部分记录

    2024-04-07 07:40:02       45 阅读
  8. Prefetch

    Prefetch

    2024-04-07 07:40:02      31 阅读