**
首先呢,了解一下它配置的优先级*
•配置文件一般使用以.yml为后缀的文件,例如:application.yml
springBoot配置文件的优先级
项目/main/resources/.yml < 项目/main/resources/.yml < 项目/.yml < 项目/config/.yml
一般我们只用 项目/config/.yml 下面的.yml配置文件
###YML*(YAML)*的基本语法
key: value //注意::后面必须加上个空格
例如:
server:
port: 8081 就相当于server.port=/8081的层级关系
值的写法:
**k: v:**这就相当于上面的格式;如果加上"",会转义字符串里面的特殊字符,对象也可以用行内的写法:如:server:{port: 8081,k: v}多个值的话需用逗号隔开,但需要注意属性名后面的冒号后必须加空格!!
数组(List Set):
用- 值表示数组中的一个元素,行内的话比如:list: [a,b]
将JavaBean注入到配置文件中
首先提供实体类以及getset方法,图中的@Component注解作用是:交给spring管理相当于
@ConfigurationProperties(prefix = “person”)这个prefix 也可以用value代替,而这个person是用来与spring容器中得person相关信息进行绑定
注:第一个实体类上面的警告可以在pom.xml里面添加依赖
org.springframework.boot
spring-boot-configuration-processor
true
解决,也可以选择不做处理,不会影响代码的正确性!
*在resources/application.ymal中注入属性
注:需要注意的是名字不能以驼峰命名法命名,否则会报错
接下来:就需要测试一下了
在controller类里面使用
@Autowired
Person person;
然后写上访问的路径及方法体就可以运行测试类的main方法,使用浏览器或者使用idea上的REST Client输入路径就可以访问了
上面的这种是使用全局配置进行属性赋值,还可以在实体类中使用 @Value注解 进行赋值,里面使用KaTeX parse error: Expected 'EOF', got '#' at position 53: …spring表达式语言==>'#̲{"值"}'进行赋值,还可以进…{“配置文件中第一级.属性名”}赋值
比较@ConfigurationProperties和@Value的区别*
最大的区别就是@ConfigurationProperties支持数据校验,而@Value则不支持。
(2)通过注解@Vuale从全局配置文件中获取数据
spring提供了一个@Value注解,获取全局配置文件中的某个配置项的数据
@Value("${}") 获取全局配置文件的数据
@Value("#{}") #{} 里面写 spring表达式,可以计算后注入数据
@Value("") 直接写字面量的普通值注入数据
如:在实体类上加上@Validated 作用是开启数据校验,如果在yml中写的格式不对的话会报错提示比如Email报错如下:
但是全局配置文件一般定义的都是有关spring配置的信息,如果我们需要定义一些与spring配置无关的信息,那么该如何呢?
我们可以定义局部的配置文件,然后使用@PropertySource注解进行获取![在这里插入图片描述](https://img-blog.csdnimg.cn/20210111214927188.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU0NDQ0OTI3,size_16,color_FFFFFF,t_70#pic_center)
1.1.5.7 @ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别; 想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
实例:
定义一个UserSercice方法,使用xml配置文件的方式管理UserService类。如何在springboot项目中获取?
定义UserService
public class UserService {
public void test(){
System.out.println(“这是UserService里面的方法”);
}
}
定义bean.xml配置文件,管理bean
在启动类上添加@importResource注解
@SpringBootApplication
@ImportResource(locations = {“classpath:bean.xml”})//加载类路径下面的配置文件
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
测试
@RestController
public class controller {
@Autowired
ApplicationContext applicationContext;
@RequestMapping("/hello")
public String hello(){
UserService userService = (UserService) applicationContext.getBean(“userService”);
userService.test();
return “这是我的第一个springboot程序”;
}
}
注意!!!:在springboot项目中,我们在spring容器中添加组件,我们一般不用以上使用xml的方式。Springboot推荐我们使用全注解的方式在spring容器添加组件。
1、配置类@Configuration------>Spring配置文件
2、使用@Bean给容器中添加组件
定义OrderService
public class OrderService {
public void test(){
System.out.println(“这是OrderService里面的方法”);
}
}
定义配置类
1)当有JavaBean与全局配置文件里的数据对应的时候,就使用@ConfigurationProperties注解
2)当只是需要配置文件中某一个值的时候,就使用@Value注解
3)在resources目录下创建两个配置文件,一个为application.yml配置文件,另一个为application.properties配置文件;
结论:在同一目录下,properties配置优先级 > YAML配置优先级。//所以我们在jar包启动时带上properties写法的配置可以覆盖配置
package com.oracle.config;
import com.oracle.service.OrderService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
/**
-
指明当前类就是一个配置类,用来替代之前的配置文件
*/
public class MyAppConfig {
//将方法的返回值添加到spring容器中,组件的默认id就是当前方法名
@Bean
public OrderService orderService(){
return new OrderService();
}
}
测试调用
@RestController
public class controller {
@Autowired
ApplicationContext applicationContext;@RequestMapping("/hello")
public String hello(){
OrderService userService = (OrderService) applicationContext.getBean(“orderService”);
userService.test();
return “这是我的实验”;
}
}
springBoot配置文件的优先级
项目/main/resources/.yml < 项目/main/resources/.yml < 项目/.yml < 项目/config/.yml
一般我们只写在 项目/config/.yml 下面