spring boot文档阅读笔记——01

一、文档地址

spring boot 官方文档

二、第一个spring boot例子

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

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

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、 Starters(spring boot 官方提供的启动器)

Starters 是,spring boot 使用起来十分方便的原因之一。官方提供了各种应用场景下的启动器,只要我们在maven中导入了相应的依赖坐标(jar包),spring boot 就能帮我们自动配置好相关的插件,即开箱即用。

spring boot 官方的启动器命名一般为:spring-boot-starter-XXX;我们在自定义启动器时,因该避免和官方的命名风格一致。可以命名为:spring-boot-XXX-starter

在这里插入图片描述

注意: spring-boot-starter-actuator 这个启动器在spring cloud中会常常使用它当作微服务的运行的监视和管理。

在这里插入图片描述

四、@SpringBootApplication注释

@SpringBootApplication注释 它是一个复合注解 ,由三个核心注解组成:@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan

你可以将@SpringBootApplication 换成 上面三个注解,程序依旧能运行起来。

//这个注解其实就是Configuration,这里只是换了个名字
@SpringBootConfiguration

//spring boot 能够自动装配的核心注解
@EnableAutoConfiguration

//配置包扫描,将扫描到在类上标注了@Component,@Controller,@Service 等注解的类,实例化为单例bean,交给spring 容器管理。
@ComponentScan(
        excludeFilters = {@ComponentScan.Filter(
                type = FilterType.CUSTOM,
                classes = {TypeExcludeFilter.class}
        ), @ComponentScan.Filter(
                type = FilterType.CUSTOM,
                classes = {AutoConfigurationExcludeFilter.class}
        )}
)
public class SpringBoot01HelloworldQuickApplication {

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

}

(一)@EnableAutoConfiguration

@EnableAutoConfiguration 注解可以通过配置过滤器(exclude、excludeName属性)来排除一些,不需要spring boot 自动装配的类。

在这里插入图片描述
可以看到注解有两个属性,他们都是数组类型。exclude 是根据类进行排除,excludeName根据类名。

注意: 数组类型需要使用{}括号括起来,使用逗号进行分隔多个排除项。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

(二)ComponentScan

包扫描可以选择哪些路径下的bean自动实例化注册到容器中。

五、devtools(热插拔)

spring boot 热部署

六、开启debug模式

配置文件:application.properties

# 默认关闭 ,true开启 
debug=true

七、故障分析器(启动spring boot失败)

在这里插入图片描述

八、 自定义横幅(启动logo)

配置文件:application.properties

# 默认开启 ,off关闭
spring.main.banner-mode=off

在这里插入图片描述

九、配置文件YAML 、properties…

Spring Boot 允许在外部加载您的配置,以便您可以使用相同的配置, 不同环境中的应用程序代码(dev、test、prod)。您可以使用properties 文件、YAML 文件、 环境变量(dev、test、prod)和命令行参数,灵活的改变配置。配合一些注解(@Value 、@ConfigurationProperties、@PropertySource + @ConfigurationProperties)将配置值直接注入到您的 bean 中, 通过 Spring 的抽象访问,或绑定到结构化 对象通过 。

官方文档提供了以下改变配置的方式:
在这里插入图片描述

(一)配置优先级

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 。

  1. 命令行参数。所有的配置都可以在命令行上进行指定;
  2. 来自java:comp/env的JNDI属性;
  3. Java系统属性(System.getProperties());
  4. 操作系统环境变量 ;
  5. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  6. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
  7. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  8. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  9. @Configuration注解类上的@PropertySource

常见的配置方式有三种:jar包内部(项目内设置)、jar包外部(打包后)、启动jar时的命令行参数(启动项目时)。

内容参考与SpringBoot 配置文件加载优先级

1. jar包内部(项目内设置)

jar包内部(项目内设置)也有优先级之分。 这里的优先级也是要遵循上面1-9级的,只是配置优先级同在6、8级时,再根据下面的优先级进行加载
在这里插入图片描述
在这里插入图片描述

如果配置文件没有被idea识别出来,可以参考这里修改idea的配置。

在这里插入图片描述

2. jar包外部(打包后)

通过maven将test代码带包成jar(创建一个spring boot 项目,然后新建几个配置文件,改一下每个配置文件的端口号)

在这里插入图片描述

# 通过下面的命令启动
java -jar xxx.jar 

发现运行的端口号是8083,而不是在打包前的8081。原因是,spring boot 打包时是不会把 ./config ./这两级的目录打包进去
在这里插入图片描述

通过jar包外配置文件覆盖 jar包内的配置文件。

SpringBoot 支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件

在打包的jar包目录下创建两个配置文件,一个放到jar包同级目录下,一个放到config中。

config/application.yml : port: 8085

application.yml : port: 8086

在这里插入图片描述

重新启动jar

java -jar xxx.jar 

在这里插入图片描述
结果为8085。

2. 启动jar时的命令行参数(启动项目时)

使用方式,在启动jar包的命令后面增加启动参数。java -jar xxx.jar --配置名=属性值

java -jar xxx.jar  --server.port=8087

在这里插入图片描述

4. 配置分支dev、test、prod

如果配置文件中出现了分支。那么jar包内部(项目内设置)、jar包外部(打包后)的优先级在指定的分支之后。也就是如果配置了分支那么以配置的分支为准。(这个可以自行测试)

指定了活跃的分支,那么会优先分支的配置

spring:
  profiles:
    active: prod
---
server:
  port: 8081
spring:
  profiles: prod
  
---
server:
  port: 8082
spring:
  profiles: test

---
server:
  port: 8083
spring:
  profiles: dev

命令行 > jar包外指定的分支 > jar包内指定的分支 > jar包外(config目录下)> jar包外(同级目录) > jar包内(config目录下)> jar包内

(二)@Value 导入

通过@Value 导入配置文件中的一些属性值到bean内。

import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;

@Component
public class MyBean {

    @Value("${my.name}")
    private String name;
    
    @Value("${my.age}")
    private int age;

}

application.yml 、application.properties:

my:
  name: lihua
  age: 18

注意:@Value 注解只能导入名字为:application的配置文件的配置。

(三)随机配置值

application.yml 、application.properties:

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

在这里插入图片描述

注意: 配置文件中${} 为占位符,可以导入其他配置 。

app.name=MyApp  
app.description=${app.name} is a Spring Boot application

(四)@ConfigurationProperties

@Value(“${my.name}”) 只能标注在属性上,一个个属性进行注入配置,比较麻烦,可以通过@ConfigurationProperties 可以按照名字匹配(支持宽松绑定)进行批量注入

在这里插入图片描述

@Component
@ConfigurationProperties(prefix = "my")
@Data
@ToString
public class User1 {
    private int id;

    private String name;

    private int age;
}

注意: 只使用这个注解只能导入名字为:application的配置文件的配置。

(五)@ConfigurationProperties + @PropertySource 指定文件加载配置

@Component
@PropertySource("123.properties")
@ConfigurationProperties(prefix = "my1")
@Data
@ToString
public class User2 {
    private int id;

    private String name;

    private int age;
}

(六)@ConfigurationProperties + @EnableConfigurationProperties

通过@EnableConfigurationProperties 注解,将配置导入到UserProperties中。

/**
 * @author lihua
 * @date 2022/12/27 8:59
 **/
@EnableConfigurationProperties({UserProperties.class})
@Configuration
public class UserAutoConfiguration {
}
/**
 * @author lihua
 * @date 2022/12/27 8:58
 **/
@ConfigurationProperties(prefix = "my2")
@Data
@ToString
public class UserProperties {

    private int id;

    private String name;

    private int age;

}

注意:这里不需要增加@Component 注解(加了就直接是第(四)点 的方式加载配置了)

(七)@Validated(导入的配置校验)

在这里插入图片描述

@Null 限制只能为null
@NotNull 限制必须不为null
@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位
数不能超过fraction
@Future 限制必须是一个将来的日期
@Past 验证注解的元素值(日期类型)比当前时间早
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式


注意:
@NotNull 适用于任何类型被注解的元素必须不能与NULL
@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0
@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0

(八)@ConfigurationProperties vs. @Value

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值