SpringBoot入门(二)

mac2024-04-19  40

3、Spring Boot配置

配置文件

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

application.propertiesapplication.yml(YAML)

配置文件的作用:修改SpringBoot自动配置的默认值(SpringBoot在底层都给我们配置好的东西)

1、配置YAML语法:

1、基本语法

k: v (:和v之间必须有一个空格):表示一对键值对(以空格的缩进来表达层级关系,左对齐的一列都是同一层级的)———>属性和值大小写敏感

2、值的写法

字面量:普通的值(数字,字符串,布尔)

k: v:字面直接来写:

字符串默认不用加上单引号或者双引号;

""双引号:不会转义字符串里面的特殊字符,特殊字符作为本身表示的意思

如:name:"zhangsan \n lisi";输出:zhangsan 换行 lisi

''单引号: 会转义特殊字符,特殊字符最终只是一个普通的字符串数据

如:name:‘zhangsan \n lisi’;输出:zhangsan \n lisi

对象、Map(属性和值)(键值对)

k: v : 在下一行来写对象的属性和值的关系:注意缩进 对象还是k: v的方式 friends: lastName: zhangsan age: 20 行内写法: friends: {lastName: zhangsan,age: 18}

数组(List,Set)

用- 值表示数组中的一个元素

pets: - cat - dog - pig

行内写法:

pets: [cat,dog,pig]

2、yaml配置文件值获取注入

配置文件:

person: lastName: zhangsan age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaoliu dog: name: Nancy age: 2

JavaBean

/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉SpringBoot将本类中所有的属性和配置文件中相关联的配置 * 进行绑定 * prefix = "person":配置文件中哪个下面的所有属性进行一一映射 * 只有这个组件在容器中,才能使用容器的功能 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String Name; private Integer age; private boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;

我们可以导入配置文件处理器(pom.xml),以后编写配置就有提示

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> @ConfigurationProperties(prefix = "person")和@Value("")均是把属性值加入到容器当中

@Value获取值和@ConfigurationProperties获取值比较

属性匹配命名规则(松散绑定):

person.firstName : 使用标准方式person.first-name : 大写用-person.first_name : 大写用_PERSON_FIRST_NAME : 大小写不区分

配置文件yml还是properties他们都能获取到值;如果我们只是在某个业务逻辑中需要获取配置文件中的某项值,就用@Value;如果我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties

3、配置文件注入值数据校验

@Component @ConfigurationProperties(prefix = "person") @Validated public class Person { /** * 原来获取属性值的配置方式: * <bean class="Person"> * <property name="Name",value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property> * </bean> */ // @Value("${person.name}") @Email private String Name; // @Value("#{12}") private Integer age; // @Value("true") private boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;

4、@PropertySource & @ImportResource

@PropertySource:加载指定的配置文件

@PropertySource(value = "classpath:person.properties") @Component @ConfigurationProperties(prefix = "person") //默认从全局配置文件中获取值 //@Validated public class Person { /** * 原来获取属性值的配置方式: * <bean class="Person"> * <property name="Name",value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property> * </bean> */ // @Value("${person.name}") @Email private String Name; // @Value("#{12}") private Integer age; // @Value("true") private boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;

@ImportResource:导入spring的配置文件,让配置文件的内容生效

SpringBoot里边没有Spring的配置文件,我们自己编写的配置文件也不能自动识别;想让Spring的配置文件生效,加载进来:@ImportResource标注在一个配置类上(可以是启动类)

@ImportResource(locations = {"classpath:beans.xml"}) //导入Spring配置类让其生效 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="<http://www.springframework.org/schema/beans>" xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>" xsi:schemaLocation="<http://www.springframework.org/schema/beans> <http://www.springframework.org/schema/beans/spring-beans.xsd>"> <bean id="helloService" class="com.example.demo.service.HelloService"> </bean> </beans>

然而,SpringBoot推荐给容器添加组件的方式:推荐使用全注释的方式

1、配置类=========(类似于)配置文件

2、使用@Bean给容器中添加组件

/** * @Configuration:指明当前类是一个配置类,替代Spring配置文件 * 在配置文件中用<bean></bean>标签添加组件 */ @Configuration public class MyAppConfig { //将方法的返回值添加到容器中:容器中这个组件默认的id就是方法名 @Bean public HelloService helloService(){ System.out.println("配置类@Bean给容器中添加组件了"); return new HelloService(); } }

5、配置文件占位符

(1)随机数 random.value、{random.int}、${random.long} random.int(10)、{random.int[1024,65536]} (2)、占位符获取之前配置的值,如果没有可以用:指定默认值 person.name=张三${random.uuid} person.age=${random.int} person.birth=2017/09/10 person.boss=false person.maps.k1=v1 person.maps.k2=v2 person.lists=a,b,c person.dog.name=${person.hello:zdy}_dog //如果没有person.hello这个属性,则这个值就默认为zdy person.dog.age=2

6、Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式来快速切换环境

(1)多Profile文件形式

我们在主配置文件编写的时候,文件名可以是

-格式:application-{profile}.properties/yml:

application-dev:properties、application-prod.properties

默认使用application.properties/yml的配置

(2)多profile文档快模式(yml文档中):

#---代表一个文档块 server: port: 8082 spring: profiles: active: prod --- server: port: 8083 spring: profiles: dev --- server: port: 8084 spring: profiles: prod #指定属于哪个环境

(3)激活方式:

-命令行 - -spring.profiles.active=dev(优先级较高)

(1)、在Run Configuration里的环境变量中配置Program arguments

(2)、打包运行jar包在命令行内执行(java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev)

-在默认配置文件(application.yml/properties)指定spring.profiles.active=dev

-jvm参数-Dspring.profiles.active=dev

在Run Configuration里的环境变量中配置VM options

7、配置文件加载位置

spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

file:./config/file:./classpath:/config/ 类路径下的config文件夹classpath:/以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置的内容会覆盖低优先级配置的内容SprigBoot会从这四个位置全部加载主配置文件:互补配置我们也可以通过配置spring.config.location来改变默认配置(项目打包以后,我们可以用命令行参数的形式来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置)

8、外部配置加载顺序

Spring Boot支持多种外部配置方式

这些方式的优先级如下:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/spring-boot-features.html#boot-features-external-config

SpringBoot也可以从以下位置加载配置:优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置

1、命令行参数

例如:java -jar spring-boot-config-02-0.0.1-SNAPSHOT.jar -- server.port=8087 --server.context-path=/abc

2、来自java:comp/env的JNDI属性

3、Java系统属性(System.getProperties())

4、操作系统环境变量

5、RandomValuePropertySource配置的random.*属性值

优先加载带profile,再加载不带profile。由jar包外向jar包内进行寻找

6、jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件(YAML变体文件)[配置文件和jar包在同一级目录,运行jar包不用参数,它会自己加载配置文件]

7、jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件(YAML变体文件)

8、jar包外部的application.properties或者application.yml(不带spring.profile)配置文件

9、jar包内部的application.properties或者application.yml(不带spring.profile)配置文件

10、@Configuration注解类上的@PropertySource

11、通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源:参考官方文档

 

最新回复(0)