SpringBoot(2)配置文件
1 yml文件 和 properties文件的配置:
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
同样配置tomcat服务器的端口号,看一下配置方式的比较:
yml文件:
server:
port: 8081
Spring中的XML文件:
<server>
<port>8081</port>
</server>
2 yml文件的语法:
(1)基本语法:
key:(空格) 值 value:(空格) 值 -----》表示一对键值对(空格必须有);
在yml文件中以**空格**的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:
port: 8081
path: /hello
属性和值也是大小写敏感;
(2)基本变量值的语法:
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
(3)对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
(4)数组(List、Set):
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
3 yml文件中配置值得注入
首先yml文件中的配置:
person:
name: zhangsan
age: 18
boos: false
maps: {k1: 2, k2: q}
dog:
name: wangwang
age: 2
然后写需要写一个对应类与yml文件对应
package com.demo.springbootdemo02.ymlTest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import java.util.Map;
/**
* @ConfigurationProperties(prefix = "person")告诉SpringBoot将本类中的相关配置与yml文件中的配置绑定
* 获取配置前缀person下的配置的一一配置。
* 并且获取的是全局配置的变量的值
*
* @Component组件 也就是这个组件只有是spring容器中的组件才能使用@ConfigurationProperties功能
*
* @PropertySource(value = {"classpath:person.properties"})获取的是person.properties这个配置文件下的配置信息
*/
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated //JSR303校验
public class person {
/**
* @Value的用法呢其实就是和spring中的下面的用法相同
* <bean class = "person">
* <property name = "last-name" value = "字面值/${kry}从环境变量、配置文件中获取值/#{SpEL}"><property/>
* <bean/>
*/
// @Value("${person.name}")
private String name;
// @Value("#{11*2}")
private Integer age;
// @Value("True")
private boolean boss;
private Map<String, Object> maps;
private Dog dog;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
", boss=" + boss +
", maps=" + maps +
", dog=" + dog +
'}';
}
}
配置类中对象的名称与yml文件中的一一对应
这个时候需要引入依赖,在pop.xml文件中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
其实就是导入了文件处理器,以后编写配置就有提示了
4 关于注解的解释问题:
(1) @Value获取值和@ConfigurationProperties获取值比较
什么时候用呢? ------
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
(2) @PropertySource&@ImportResource& @Configuration&@Bean
@PropertySource 加载指定的配置文件;
@PropertySource(value = {"classpath:person.properties"})
@Configuration 表明类为配置类
@Bean 给容器组添加组件
具体使用:
首先配置类
package com.demo.springbootdemo02.Config;
import com.demo.springbootdemo02.Service.helloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Configuration指明这是一个配置类,代替的是之前的spring配置组件
* 在Spring组件中是使用<bean><bean/>标签添加到容器中的
*/
@Configuration
public class myConfig {
/**
*就是将方法的返回值添加到容器中,容器中这个组件默认的id是方法的名称
* 就是这里的id = helloService;
*/
@Bean
public helloService helloService(){
return new helloService();
}
}
然后测试类,测试组件有没有被加入到IOC容器中
@Autowired
org.springframework.context.ApplicationContext ioc;
@Test
public void testHelloService(){
boolean b = ioc.containsBean("helloService");
System.out.println(b);
5 配置文件的占位符问题:
(1)随机产生
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}
(2)占位符获取之前配置的值,如果没有可以是用:指定默认值
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
6 Profile指定即多配置文件的编写使用
(1) 多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
(2) yml支持多文档块方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
(3)激活指定profile 有一下三种方式
a、在配置文件中指定 spring.profiles.active=dev
b、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
c、虚拟机参数;
-Dspring.profiles.active=dev
---------------------
作者:WilsonSong1024
来源:CSDN
原文:https://blog.csdn.net/WilsonSong1024/article/details/80112338
版权声明:本文为博主原创文章,转载请附上博文链接!