SpringBoot学习笔记—Day02
spring boot 的配置文件
spring boot使用一个全局的配置文件,默认支持俩种类型的配置文件,application.properties和application.yml,spring boot中的这个全局的配置文件的名字是固定的,
配置文件的作用: 修改spring boot配置文件的默认值
yml又叫YAML,
k:(空格)v 表示一组键值对,空格必须有
以空格的缩进来控制层级关系,左对齐的一列数据都是同一层级的,另外属性和值也是大小写敏感
server:
port:8081
path:/hello
演示代码
先导入配置文件处理器,这样绑定配置文件会有提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
编写配置文件的映射java类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String username;
private Integer password;
private Boolean boss;
private Date birth;
private Map<String ,Object> maps;
private List<Object> lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"username='" + username + '\'' +
", password=" + password +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getPassword() {
return password;
}
public void setPassword(Integer password) {
this.password = password;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
yml的写法
person:
username: 啦啦啦
password: 456789
boss: true
birth: 2020/12/11
maps: {k1: v1,k2: v2}
lists:
- abc
- 啦啦啦
dog:
name: 汪汪
num: 6
其中@ConfigurationProperties注解作用: 该注解下的java类映射配置文件
属性prefix是标记配置文件中的元数据
另外@ConfigurationProperties需要在spring容器的作用下才会起作用,所以需要加@Component注解
@Value注解和@ConfigurationProperties注解的区别
@Value注解同样也可以获取properties或者yaml文件中的信息,以下是@Value注解和@ConfigurationProperties注解的区别
@ConfigurationProperties | @Value |
---|---|
批量注入配置文件的属性 | 单个指定 |
支持松散绑定 | 不支持 |
不支持SpEL | 支持SpEL |
支持jsr303数据校验 | 不支持 |
支持复杂类型封装(map,list等) | 不支持 |
无论是properties还是yaml,这俩个注解都可以获取到值
如果说我们在业务逻辑中获取一下配置文件中的某个值,可以使用@Value注解
如果我们编写了一个javaBean来和配置文件进行映射,那么可以使用@ConfigurationProperties注解
@PropertySource(value = “classpath:person.properties”)
@PropertiesSource注解可以加载指定的配置文件,但是需要在@ConfigurationProperties注解下使用,属性value内需要加classpath:
@PropertySource注解使用示例
@PropertySource(value = "classpath:person.properties")
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
@ImportResource注解
作用: 导入spring配置文件,让配置文件生效
spring boot里面没有spring的配置文件,所以我们自己编写的配置文件不会生效
将@ImportResource注解标注在一个配置类上,可以让我们编写的spring配置文件生效
使用示例:
@ImportResource(locations = "classpath:bean.xml")
@SpringBootApplication
public class SpringBootStudyQuickApplication {
但是spring boot不推荐这种方式,spring boot 推荐使用全注解的方式
示例演示:注解方式的配置类
/**
* @Configuration注解表明这是一个配置类
*
*/
@Configuration
public class MyAppConfig {
/**
* 将方法的返回值添加到容器中,容器中这个组件的id就是方法名(也可以用name属性进行指定)
* @return
*/
@Bean
public HelloService helloService(){
System.out.println("helloService方法执行了...");
return new HelloService();
}
}
profile多环境开发
1、多profile文件形式:
– 格式:application-{profile}.properties/yml: • application-dev.properties、application-prod.properties
2、多profile文档块模式(yaml):
3、激活方式:
– 命令行(Program argumants) --spring.profiles.active=dev
– 配置文件 spring.profiles.active=dev
– jvm参数(VM options) –Dspring.profiles.active=dev
指定属于哪个环境演示:
spring:
profiles: dev
配置文件指定示例演示
spring:
profiles:
active: dev
开发环境(dev):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。
测试环境(test):一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
生产环境(prod):是值正式提供对外服务的,一般会关掉错误报告,打开错误日志。
三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。