SpringBoot

本文深入探讨SpringBoot的优点,如快速启动、内嵌式容器和默认配置,以及微服务思想。详细讲解SpringBoot配置、启动流程、自动装配、yaml使用、数据校验、配置优先级和多环境配置。同时,介绍了模板引擎Thymeleaf,SpringBoot的JDBC配置、Druid监控SQL、过滤器和整合Mybatis。最后,文章涉及了SpringSecurity和Shiro的安全管理,包括授权、拦截和认证过程。
摘要由CSDN通过智能技术生成

SpringBoot

优点

  • 入门快
  • 开箱即用,提供各种默认配置来简化项目
  • 内嵌式容器简化Web项目
  • 省去xml配置的"配置地狱"

微服务

​ 以前的项目都是一个整体,微服务的思想就是把一个个小的模块独立开来。把独立出来的功能元素动态组合,需要的功能元素才组合。

  • 节省了调用资源
  • 每个功能元素的服务都是一个可替换的,可独立升级的软件代码。

image-20200807154107836

官方提供了一个快速生成SpringBoot项目的网站,IDEA默认使用。

SpringBoot配置

server.port=8081
  • SpringBoot项目默认的父工程是spring-boot-starter-parent.pom 里面有大量的jar包依赖
  • SpringBoot会将所有的功能场景,变成一个个启动器(starter)
  • 要使用什么功能,只需找到对应的启动器

SpringBoot的启动

package com.rush;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication表明这个类是一个springboot的应用
@SpringBootApplication
public class BoottestApplication {
   
    //启动springboot应用
    public static void main(String[] args) {
   
        SpringApplication.run(BoottestApplication.class, args);
    }

}

image-20200808112440334

使用@Configuration Spring配置注解

image-20200808112518615

@Component表明这是一个组件

image-20200808112544163

​ 配置目录下有很多配置还是需要我们能手动调用starter,这是因为源码中使用了@ConditionOnClass注解,表明我们需要导入类才生效。

SpringBoot中所有的自动配置都在启动类中被扫描并加载,所有的自动配置类都在spring.factories中,有一些需要导入对应的starter才会生效。

步骤

  • ①SpringBoot在启动时,从类路径下/META-INF/spring.factories获取指定的值
  • ②将自动配置的类导入容器,自动配置就会生效(不用手动配置了,破解"配置地狱"

SpringApplication

  • 判断应用的类型是普通项目还是web项目
  • 查找并加载所有可用初始化器,设置到initializers属性中
  • 找出所有的应用程序监听器,设置到listeners属性中
  • 推断并设置main方法的定义类,找到运行的主类

热部署

不用重启也可以修改项目

image-20200808125830315

yaml

类似xml的新型配置文件
#普通的
name: rush #注意一定要在冒号后面加空格
#对象
student:
	name: rush
	age: 3
#对象 行内写法 
student: {
   name: rush,age: 3}
#数组
pets:
- cat
- dog
- pig
#数组 行内写法
pets: [cat,dog,pig]

使用yaml赋值

package com.rush.po;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

/**
 * @author:zmc
 * @function:
 * @date: 2020/8/8 13:35
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
   
    private String name;
    private int age;
}
package com.rush.po;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author:zmc
 * @function:
 * @date: 2020/8/8 13:35
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
   
    private String name;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    @Override
    public String toString() {
   
        return "Person{" +
                "name='" + name + '\'' +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}
person:
  name: rush
  age: 5
  birth: 2019/11/02
  maps: {
   k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: 旺财
    age: 3

测试类

package com.rush;

import com.rush.po.Dog;
import com.rush.po.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BoottestApplicationTests {
   
    @Autowired
    private Person person;
    @Test
    void contextLoads() {
   
        System.out.println(person);
    }

}

@ConfigurationProperties

@ConfigurationProperties作用:将配置文件中的值映射到这个组件中

image-20200808140123045

image-20200808140151051

SPEL

Spring里面的el表达式

name: rush${
   random.uuid}
age: ${
   random.int}
happy: ${
   person.dog:dog} #如果若person.dog存在 输出 否则输出dog

yaml和properties对比

image-20200808141135090

松散绑定:user-name = userName

JSR303数据校验

依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>2.3.1.RELEASE</version>
        </dependency>
@Validated
public class Person {
   
    @Email()
    private String name;
}

若传入name不是邮箱格式,则会报错。

image-20200808144613853

image-20200808144630072

配置优先级

  • ①file:./config/
  • ②file:./
  • ③classpath:/config/
  • ④classpath:/

image-20200808145756037

多环境配置

yaml

设置默认为8081 可切换为dev或test模式

server:
  port: 8081
spring:
  profiles:
    active: dev
---
  server:
    port: 8081
    spring:
      profile: dev

---
server:
  port: 8081
  spring:
    profile: test

---

properties

image-20200808150413025

设置更换环境

spring.profiles.active=dev 

自动装配

  • SpringBoot启动会加载大量的配置类
  • 我们需要检查我们需要用的功能是否在SpringBoot中默认配置类中
  • 检查这个默认配置类有哪些组件
  • 给容器中自动配置类添加组件时,会从properties类中获取某些属性,我们只需要在配置文件中指定这些属性的值即可。

xxxxAutoConfiguration:自动配置类 给容器添加组件

xxxxProperties:封装配置文件中相关属性

通过SpringBoot配置我们可以修改Properties类中的属性值

静态资源

  • 使用webjars导入 使用localhost:端口号/webjars/访问
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.4.1</version>
        </dependency>
  • 优先级 resources > static > public 这些都映射到localhost:端口号/下

模板引擎

​ 模板引擎是为了使用户界面与业务数据(内容)分离而产生地,可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

thymeleaf

导入依赖

<dependency>
            <groupId>org.thymeleaf</groupId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值