SpringBoot学习笔记02

SpringBoot起步依赖原理

spring-boot-starter-parent

依赖管理:主要定义了版本信息。大部分技术的版本在经过组合测试不会产生冲突后,会在父工程中确定好并锁定。用户在使用时,不需要自己挑选和组合不同技术版本,避免了版本冲突问题
部分版本信息

spring-boot-starter-web

依赖传递:starter-web依赖于特定的坐标(如下图所示),项目依赖于starter-web,则项目间接依赖于这些坐标。用户在使用时只需要导入一个starter-web,而不需要自己将所需坐标一个个进行导入,简化了操作
web依赖的版本信息

总结

  • 在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
  • 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。
  • 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题

SpringBoot配置

配置文件分类

  • properties:
    server.port=8080
    
  • yml(yaml):
    server:
    	port: 8080
    

1.properties

在这里插入图片描述
在resources/application.properties(自动生成)中配置端口(默认为8080),然后启动项目,可以看到端口已经改为8081
在这里插入图片描述

2.yml(yaml)

在这里插入图片描述
yml(yaml)文件同理,但是文件需要自己新建

基本语法

  • 大小写敏感
  • 数据值前面必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进不允许使用Tab键,只允许使用空格
  • 使用#表示注释

数据格式

  • 对象(map):键值对的集合
    person:
      name: zhangsan
    #行内写法
    person: {
          
          name: zhangsan}
    
  • 数组
    address:
      - beijing
      - shanghai
    #行内写法
    address: [beijing,shanghai]
    
  • 纯量
    msg1: 'hello \n world' #单引忽略转义字符
    msg2: 'hello \n world' #双引识别转义字符
    

参数引用

name: lisi
person: 
  name: ${
    
    name}  #引用上面定义的name值

优先级

在同级目录下,优先级
properties > yml > yaml

读取配置内容

  • @Value
  • Environment
  • @ConfigurationProperties

yml配置文件:

name: abc
#对象
person:
  name: zhangsan
  age: 20
#数组
address:
  - beijing
  - shanghai

1.@Value:单个注入

在java文件中读取配置内容

	@Value("${name}")
	private String name;
	//对象
	@Value("${person.name}")
	private String name2;
	//数组
	@Value("${address[0]}")
	private String address;

2.Environment:全部注入

	//注入方式
	@Autowired
	private Environment env;
	//使用方式
	System.out.println(env.getProperty("person.name"));
	System.out.println(env.getProperty("address[0]"));

注意不要导错包
在这里插入图片描述

3.@ConfigurationProperties:部分注入

yml配置文件

person:
  name: zhangsan
  age: 20
  address:
  - beijing
  - shanghai

Person类

package com.study.springbootinit;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "person") //获取对象"person"中的两个值
public class Person {
    
    

	//须与配置文件中的名称相同
	private String name;
	private int age;
	private String[] address;

	public String[] getAddress() {
    
    
		return address;
	}
	
	@Override
	public String toString() {
    
    
		return "Person{" +
				"name='" + name + '\'' +
				", age=" + age +
				'}';
	}
}

打印数据

	//注入Person
	@Autowired
	private Person person;

	@RequestMapping("/hello2")
	public String Hello2() {
    
    
		System.out.println(person);//打印name和age
		String[] address = person.getAddress();
		for (String s : address) {
    
    
			System.out.println(s);
		}//打印address
		return "hello Spring Boot!";
	}

使用@ConfigurationProperties注解之后弹出红框的解决方式
在这里插入图片描述

点击右侧的Open documentation,打开Spring的网页,将这一段依赖加入到pom文件中,然后刷新Maven(否则会报错)
在这里插入图片描述
导入依赖后,在配置文件中写代码的时候就会有提示功能(自动补全)

profile

1.多profile文件方式

在resources文件夹中新建三个文件dev(开发环境)、test(测试环境)和pro(生产环境)
在这里插入图片描述
激活方式
在application文件中激活

spring.profiles.active=pro  #使用后缀选择激活文件

启动测试可以看到pro被激活
在这里插入图片描述

2.yml多文档方式

只需新建一个application.yml文件

#使用---分隔符
---  
server:
  port: 8081
spring:
  profiles: dev
---
server:
  port: 8082
spring:
  profiles:
    active: test  #被激活的文件
---
server:
  port: 8083
spring:
  profiles: pro
---

内部配置加载顺序

  1. file:./config/ 当前项目下的/config目录
  2. file:./ 当前项目的根目录
  3. classpath:/config/ classpath的/config目录
  4. classpath:/ classpath的根目录

排列顺序即为加载顺序,SpringBoot程序启动时,差异配置依次读取,相同配置使用最高优先级

在这里插入图片描述
提示:main中的java和resources文件会被打包到 classpath:/目录

外部配置加载顺序

官网查看:Externalized Configuration

猜你喜欢

转载自blog.csdn.net/m0_62721576/article/details/128408410