SpringBoot配置⽂件
SpringBoot使⽤⼀个全局的配置⽂件,配置⽂件名是固定的
application.properties
我们⾸先说⼀下yml ⽂件的⽤法
基本语法
k:(空格)v:表⽰⼀对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的⼀列数据,都是同⼀个层级的
person:
#我们可以配置普通的字⾯值,字符串不需要加引号
name: yangzhao
#加双引号输出 basektball 换⾏ is my
favorite:"basektball\n is my "
#加单引号 who is \n my hatedirection英文解释
hate:'who is \n my hate'
birth: 2017/10/10
#⽀持占位符 ${random.value}、${random.int}、${random.long}、${random.uuid}
age: ${random.int}
#数组可⽤下⾯两种写法
#  address:
#    - heilongjiang
#    - anhui
#    - zhejiang
address:[heilongjian,zj,ah]
#Map 写法
childrens:
son: zzz
gitl: yyy
#对象的写法
#⽀持占位符,st:hello 如果st 没有值,则使⽤默认值hello
dog:
name: xiaogou
age: ${random.int}
#  dog: {name: hello,age: 2}
那我们的配置⽂件中的值如何与我们的java bean 绑定呢?
1.1 数据绑定
1.1.1 ConfigurationProperties
我们可以加上Component注解与ConfigurationProperties注解,并在ConfigurationProperties注解中声明我们要绑定默认的配置⽂件中属性的前缀(毕竟我们的配置⽂件中会写很多配置)
/**
*将配置⽂件中配置的每⼀个属性的值,映射到这个组件
*@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定* prefix = "person":配置⽂件中哪个下⾯的所有属性进⾏⼀⼀映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能
*/
@Component
@Validated//数据校验
@ConfigurationProperties(prefix ="person")
public class Person {
private String favorite;
private String hate;
private String name;
//检测值是否为Email格式
@Email
private String email;
private Date birth;
private int age;
private List<String> address;
private Map<String,String> childrens;
系统架构设计师真题2020
private Dog dog;
我们可以导⼊配置⽂件处理器,以后编写配置就有提⽰了
<!‐‐导⼊配置⽂件处理器,配置⽂件进⾏绑定就会有提⽰‐‐>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐configuration‐processor</artifactId>
<optional>true</optional>
</dependency>
1.1.2 Value
我们还可以使⽤@Value注解对bean进⾏数值绑定
//从配置⽂件获取值
/**
*相当于spring的bean配置
*<bean class="Person">
* <property name="lastName" value="字⾯量/${key}从环境变量、配置⽂件中获取值/#
{SpEL}"></property>
* <bean/>
*
*/
@Value("${person.name}")
private String name;
//字⾯值常量
@Value("2017/10/10")
private Date birth;
//⽀持SPEL表达式
@Value("#{2+5}")
private int age;
@Value获取值和@ConfigurationProperties获取值⽐较
Value ConfigurationProperties 功能⼀个个指定批量注⼊配置⽂件中的属性松散绑定(松散语法)不⽀持⽀持
SpEL⽀持不⽀持
JSR303不⽀持⽀持
复杂类型封装不⽀持⽀持
这⾥说⼀下松散绑定与JSR303数据校验
配置⽂件person: lastName @Value(“last-name”) 是获取不到值得,⽽ConfigurationProperties可以
如果我们使⽤数据校验
配置⽂件person: yangzhao ⽽我们⼜使⽤ConfigurationProperties进⾏绑定
@Email
private String name;
这样会报错的
Property: person.name
Value: yangzhao
Origin:class path resource [l]:2:9
Reason:不是⼀个合法的电⼦邮件地址
配置⽂件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取⼀下配置⽂件中的某项值,使⽤@Value;
如果说,我们专门编写了⼀个javaBean来和配置⽂件进⾏映射,我们就直接使⽤@ConfigurationProperties;
tostring 162.@PropertySource&@ImportResource&@Bean
我们把所有的配置都写在默认的配置⽂件中未免过于沉重,所以我们可以使⽤@PropertySource 加载指定的配置⽂件
我们可以把我们person的配置写在person.properties⽂件中
@PropertySource(value ={"classpath:person.properties"})
@Component
vbs脚本控制键盘按钮@ConfigurationProperties(prefix ="person")
public class Person {
@ImportResource:导⼊Spring的配置⽂件,让配置⽂件⾥⾯的内容⽣效
Spring Boot⾥⾯没有Spring的配置⽂件,我们⾃⼰编写的配置⽂件,也不能⾃动识别; 想让Spring
的配置⽂件⽣效,加载进来;需要将@ImportResource标注在⼀个配置类上
我们写⼀个l 并在⾥⾯配置bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans /sc
hema/beans/spring-beans.xsd"> <bean id="helloService"class="ample.demo.serivce.HelloService"></bean>
</beans>
接下来我们写测试类,看HelloService是否注册到spring容器中,
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
ApplicationContext app;
@Test
public void testHelloService(){
System.out.ainsBean("helloService"));
}
}
可以看到输出false,所以正如上⾯所说Spring Boot⾥⾯没有Spring的配置⽂件,我们⾃⼰编写的配置⽂件,也不能⾃动识别
所以我们再我们的主配置类上增加@ImportResource 注解即可,
@ImportResource(locations ="l")
@SpringBootApplication
public class DemoApplication {
frighting是加油吗public static void main(String[] args){
SpringApplication.run(DemoApplication.class, args);
properties是什么文件}
}
但是SpringBoot并不推荐这么做
pringBoot推荐给容器中添加组件的⽅式;推荐使⽤全注解的⽅式.在SpringBoot中我们的@Configuration对应我们的Spring配置⽂件,因此我们可以使⽤@Bean注解进⾏注册
我们编写配置类
@Configuration
public class AppConfig {
//⽅法名即为注册bean id,返回值为实例
@Bean
public HelloService helloService(){
return new HelloService();
}
}
我们再次运⾏测试类,可以看到HelloService 已经注册到我们的IOC容器中了
2.多环境配置
2.1. 多Profile⽂件
我们在主配置⽂件编写的时候,⽂件名可以是 application-{profile}.properties/yml
默认使⽤application.properties的配置
2.2 yml⽀持多⽂档块
server:
port:8081
spring:
profiles:
active: prod
‐‐‐
server:
port:8083
spring:
profiles: dev
‐‐‐
server:
port:8084
spring:
profiles: prod #指定属于哪个环境
2.3 激活指定profile
2.3.1 在配置⽂件中指定 spring.profiles.active=dev
2.3.2命令⾏
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar -–spring.profiles.active=dev 可以直接在测试的时候,配置传⼊命令⾏参数
2.3.3 虚拟机参数
-Dspring.profiles.active=dev
3 配置⽂件加载位置
pringboot 启动会扫描以下位置的application.properties或者l⽂件作为Spring boot的默认配置⽂件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由⾼到底,⾼优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置⽂件;互补配置;
我们还可以通过fig.location来改变默认的配置⽂件位置
项⽬打包好以后,我们可以使⽤命令⾏参数的形式,启动项⽬的时候来指定配置⽂件的新位置;指定配置⽂件和默 认加载的这些配置⽂件共同起作⽤形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar –-fig.location=G:/application.properties
4 外部配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从⾼到低;⾼优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
4.1 命令⾏参数
所有的配置都可以在命令⾏上进⾏指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar –-server.port=8087 –-t-path=/abc
个配置⽤空格分开; –配置项=值
4.2 由jar包外向jar包内进⾏寻;优先加载带profile,再来加载不带profile(与3 结合,优先加载jar外config下的,然后同级⽬录的)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。