SpringBoot初级笔记

本文介绍了SpringBoot的基础知识,包括什么是SpringBoot、微服务架构的概念,以及如何创建和运行第一个SpringBoot程序。详细讲解了核心配置文件YAML的使用,包括属性注入、组件配置、多环境切换以及数据校验。最后探讨了SpringBoot的运行原理,以及如何进行Web开发,如静态资源处理、模板引擎Thymeleaf的使用。
摘要由CSDN通过智能技术生成

微服务阶段

javase:OOP

mysql:持久化

html+css+js+jquery+框架:视图,框架不熟练

javaweb:独立开发MVC三层架构的网站

ssm:框架,简化了我们的开发流程,配置也开始较为复杂

上面的项目打的是war包:tomcat中运行

下面的springboot项目打的是jar包:内嵌tomcat

spring再简化:SpringBoot;微服务架构!

服务越来越多:springcloud

SpringBoot

1. 什么是SpringBoot

SpringBoot是基于Spring的一个JavaWeb的开发框架,能迅速的开发web应用,几行代码开发一个http接口。

约定大于配置的核心思想

Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门
  • 开箱即用,提供各种默认配置来简化项目配置 自动装配
  • 内嵌式容器简化Web项目
  • 没有冗余代码生成和XML配置的要求

2. 微服务架构

在此之前,我们接触过的架构有:MVC三层架构、MVVM

那么什么是微服务架构呢?

首先我们要知道原先all in one的架构方式,我们把所有的功能单元放在了一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后再负载均衡。

所谓的微服务架构,就是打破之前all in one的架构方式,把每个功能元素独立出来。把独立出来的功能元素进行动态组合,需要的功能元素才去拿来组合,需要多一些时可以整合多个功能元素,所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制

3. 第一个SpringBoot程序

  • jdk1.8
  • maven 3.6.1
  • springboot 最新版
  • IDEA

官方:提供了一个快速生成的网站,IDEA集成了这个网站

3.1 创建方式

  1. 可以在官网直接下载后,导入idea开发https://start.spring.io/
  2. 直接使用idea创建一个springboot

3.2 IDEA创建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDZHmIoK-1602519646725)(G:\学习笔记\SpringBoot笔记\image\1.PNG)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0OuWlYKv-1602519646729)(G:\学习笔记\SpringBoot笔记\image\2.PNG)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ybaBRG88-1602519646732)(G:\学习笔记\SpringBoot笔记\image\3.PNG)]

等待依赖导入成功后,删除不必要的文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNXxRROb-1602519646735)(G:\学习笔记\SpringBoot笔记\image\4.PNG)]

在构建完成springboot项目之后,我们看一下项目的目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Grd1Nzid-1602519646737)(G:\学习笔记\SpringBoot笔记\image\5.PNG)]

3.3 编写代码

不需要我们原先的那些繁杂的配置文件

项目代码需要创建的包一定要和程序的主启动类在同一级目录下!!

直接在我们创建的controller包下新建一个HelloController类,

代码的写法与在springmvc中所学的一样:

@RestController
public class HelloController {
   

    // 接口:http://localhost:8080/hello
    @RequestMapping("/hello")
    public String helloSpringBoot() {
   
        // 调用业务层,接收前端参数
        return "Hello, SpringBoot!";
    }
}

3.4 IDEA运行项目

springboot内部默认内嵌了tomcat去部署项目,

那么我们只需要运行==程序主启动类==中的main方法,

就是启动了该项目

package com.anuo.springboot_study;

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

/** 
 * 程序的主入口,启动项目只需要运行此方法
 * @SpringBootApplication:标注了这个类是一个springboot的应用
 */
@SpringBootApplication
public class SpringbootStudyApplication {
   

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

}

3.5 浏览器访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdtYdKW5-1602519646741)(G:\学习笔记\SpringBoot笔记\image\6.PNG)]

3.6 命令行运行jar包

  • 什么时候需要命令行运行?

    1. 当我们用IDEA怎么都启动不了项目,感觉代码也没什么问题时,可以试试脱离IDEA,使用命令行去运行项目的jar包。如果在命令行运行成功,就说明项目的代码是没有问题的,是IDEA的问题。
    2. 开发使用IDEA运行,部署测试使用命令行运行
  • 步骤:

    当我们执行Maven的package命令后。会将我们的项目打包成jar包放置在target文件夹下。

    打开cmd命令行,输入java -jar 项目jar包名,项目即可运行

    关闭运行中的项目:Ctrl + C

小彩蛋

修改启动项目时,控制台所显示的头横幅:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPOKNo2G-1602519646743)(G:\学习笔记\SpringBoot笔记\image\7.PNG)]

  • 步骤:

    1. 网址https://www.bootschool.net/ascii

      去生成想要的ASCII文字,可以自定义也可以选择设计好的

    2. 在项目的src - main - java - resources包下建立新文件banner.txt

    3. 将我们要使用的ASCII文字拷贝进banner.txt文件

      例如:

      
      //                          _ooOoo_                               //
      //                         o8888888o                              //
      //                         88" . "88                              //
      //                         (| ^_^ |)                              //
      //                         O\  =  /O                              //
      //                      ____/`---'\____                           //
      //                    .'  \\|     |//  `.                         //
      //                   /  \\|||  :  |||//  \                        //
      //                  /  _||||| -:- |||||-  \                       //
      //                  |   | \\\  -  /// |   |                       //
      //                  | \_|  ''\---/''  |   |                       //
      //                  \  .-\__  `-`  ___/-. /                       //
      //                ___`. .'  /--.--\  `. . ___                     //
      //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
      //            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
      //            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
      //      ========`-.____`-.___\_____/___.-`____.-'========         //
      //                           `=---='                              //
      //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
      //            佛祖保佑       永不宕机     永无BUG                    //
      
      
  • 展示效果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmQGnSpx-1602519646746)(G:\学习笔记\SpringBoot笔记\image\8.PNG)]

4. 核心配置文件

SpringBoot使用一个全局的配置文件,配置文件名称是固定的。

  • application.properties
    • 语法结构: key=value
  • application.yaml 【推荐】
    • 语法结构:key: (空格) value

4.1 配置文件的作用

  1. 修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
  2. 给组件(例如:实体类)注入属性值

4.2 YAML

YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。

在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)

这种语言以数据作为中心,而不是以标记语言为重点!

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml:

传统xml配置:

<server>
    <port>8080<port>
</server>

yaml配置:

server:
  prot: 8080
4.2.1 yaml基础语法

语法要求严格!

1、空格不能省略

2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

3、属性和值的大小写都是十分敏感的。

yaml语法中的value,可以是字面量、对象、Map、数组等:

字面量:普通的值

例如:数字、布尔值、字符串

字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号

key: value
  • 如果字符串中有特殊字符,需要加双引号或者单引号,需要注意:
  1. “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思:

    比如 :name: “kuang \n shen” 输出 :kuang

    ​ shen

  2. ‘’ 单引号,会转义特殊字符,特殊字符最终会变成和普通字符一样输出

    比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen

对象、Map(键值对)
#对象、Map格式
key: 
    value1:
    value2:

在下一行来写对象的属性和值得关系,注意缩进。比如:

student:
    name: chenjian
    age: 3

行内写法:

student: {
   name: chenjian, age: 3}
数组、List、Set

用 - 值表示数组中的一个元素,比如:

pets:
 - cat
 - dog
 - pig

行内写法:

pets: [cat,dog,pig]
4.2.2 yaml中使用占位符

yaml配置文件还可以编写占位符生成随机数

person:
  name: 陈健${
   random.uuid} # 拼接随机uuid
  age: ${
   random.int} # 随机int值
  happy: true
  birth: 2019/11/02
  maps: {
   k1: v1, k2: v2}
  lists: [code, music, girl]
  dog:
  	# 当存在person.hello时,为person.hello的值;不存在时为"hello"
    name: ${
   person.hello:hello}_旺财
    age: 3
4.2.3 组件注入配置文件
  • yaml文件中使用注解**@ConfigurationProperties(prefix = “#”)** 【重点】
  • properties文件中使用注解**@PropertySource(“classpath: #”)**【扩展】

yaml文件更强大的地方在于,他可以简便地给我们的实体类直接注入匹配值

首先,创建两个实体类:

  1. Dog

    @Component
    public class Dog {
         
        private String name;
        private Integer age;
      	private Person person;
    		// ...省略构造、getter和setter方法
    }
    
  2. Person

    @Component
    public class Person {
         
        private String name;
        private Integer age;
        private Boolean happy;
        private Date birth;
        private Map<String, Object> maps;
        private List<Object> lists;
        private Dog dog;
        // ...省略构造、getter和setter方法
    }
    
  • 在原先Spring中给组件的属性注入值的方法:

    普通类型使用:@Value

    对象类型使用:@Autowired

    @Component
    public class Dog {
         
      	@Value("诺诺")
        private String name;
      	@Value("3")
        private Integer age;
      	@Autowired
      	private Person person;
    		// ...省略构造、getter和setter方法
    }
    
  • 在SpringBoot中支持yaml配置文件给组件的属性注入值

    1. yaml配置文件:application.yaml

      # springboot的核心配置文件
      # yaml对空格的要求十分严格!
      # yaml能够注入到我们的配置类中
      
      person:
        name: 陈健
        age: 22
        happy: true
        birth: 2019/11/02
        maps: {
             k1: v1, k2: v2}
        lists: [code, music, girl]
        dog: {
             name: 旺财, age: 3}
      
    2. 在实体类person中使用注解@ConfigurationProperties

      告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定

      /*
          @ConfigurationProperties作用:
          将配置文件中配置的每一个属性的值,映射到这个组件中;
          告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
          参数 prefix = “person” : 将配置文件中的person下面的所有属性与之一一对应
      */
      @Component
      @ConfigurationProperties(prefix = "person")
      public class Person {
             
          private String name;
          private Integer age;
          private Boolean happy;
          private Date birth;
          private Map<String, Object> maps;
          private List<Object> lists;
          private Dog dog;
          // ...省略构造、getter和setter方法
      }
      
    3. 测试

      // 单元测试
      @SpringBootTest
      class SpringbootStudyApplicationTests {
             
      
          @Autowired
          private Person person;
      
          @Test
          void contextLoads() {
             
              System.out.println(person);
          }
      }
      ======================================
      运行结果:
      Person{
             name='陈健', age=22, happy=true, birth=Sat Nov 02 00:00:00 CST 2019, maps={
             k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog{
             name='旺财', age=3}}
      
      

      我们可以看到,配置文件中的配置成功注入到了组件中!!

  • 在使用@ConfigurationProperties注解时,IDEA 提示springboot配置注解处理器没有找到

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNxugFgS-1602519646748)(G:\学习笔记\SpringBoot笔记\image\9.PNG)]

    解决方案:在pom.xml中导入下面的依赖

    <!-- 导入配置文件处理器,配置文件进行绑定就会有提示 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    
  • 在SpringBoot中同样支持properties配置文件给组件的属性注入值【扩展】

    1. properties配置文件:

      这里不需要用核心配置文件的名字:application.properties

      可以指定任意的名字:person.properties

      name=陈健
      
    2. 在实体类person中使用注解@PropertySource

      步骤一:加载指定的配置文件

      步骤二:在特定字段上通过**@Value(“SPEL表达式”)**取出配置文件的值

      ​ 当然也可以**@Value(“自定义值)**

      @Component
      // 1.加载指定的配置文件
      @PropertySource("classpath:person.properties")
      public class Person {
             
        	// 2.SPEL表达式取出配置文件的值
          @Value("${name}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值