文件类型介绍
- properties
该文件是一种key-value
的格式,配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map<String, String>
来表示它。
用Properties读取配置文件非常简单。Java默认配置文件以.properties
为扩展名,每行以key=value表示,以#
课开头的是注释。
spring.profiles.active=dev
server.port = 8080
- yaml
YAML是是以数据作为中心的文本,使用空格、缩进、分行来组织数据,使得内容更加简洁易读,并且有利于运维人员后期的维护,有点类似于json格式。
server:
prot: 8080
相对于properties更简洁,减少冗余性。
yaml以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。属性和值的大小写都十分敏感的。值前面一定要有一个空格。""
:双引号;不会转义字符串里面的特殊字符;''
:单引号;会转义特殊字符。
优势
spring boot配置文件
通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties
或 apllication.yml
作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。
application.properties 优先级高于 application.yml。一个项目中只使用一种格式的配置文件,便于统一管理维护维护。
spring boot项目启动时默认加载的优先级:
yaml配置文件的内容填充到IOC
容器中:
spring boot项目在启动时都会读取并记载配置文件,通过@ConfigurationProperties
注解可以将配置文件的所有内容加载到IOC容器并装配, @Value
将相关属性一一对应自动装配。
person:
name: mike
age: 21
sex: 男
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String sex;
private Date date;
private Dog dog;
private List<Object> list;
private Map<String,Object> map;
//setter and getter
}
@Component //注册bean
@PropertySource(value = "classpath:user.properties")
public class User {
//直接使用@value
@Value("${user.name}") //从配置文件中取值
private String name;
@Value("#{user.age}") // #{SPEL} Spring表达式
private int age;
@Value("user.sex") //
private String sex;
}
@PropertySource
用于加载指定文件,非application
前缀命名的都要使用该注解。该注解解决了一些配置分文件管理,不必都写了主配置文件中,减少冗余。
还有一个注解是
@ImportResource
自定义的xml
配置文件,默认情况下这个bean是不会加载到Spring容器中来的。需要@ImportResource注解将这个配置文件加载进来。
多profile文件多启动环境
在开发,运行和测试的阶段,不同环境需要不同的配置如dev,pro,local
环境
这样在启动时只需要激活相应的环境即可。
spring.profiles.active=dev
激活配置文件。
除了在配置文件中在idea中也可以更改:
在pom文件中也可以设置
yaml的配置文件激活
两种配置方式的比较:
(1)Properties配置多环境,需要添加多个配置文件,YAML只需要一个配件文件
(2)书写格式的差异,yaml相对比较简洁,优雅
(3)YAML的缺点:不能通过@PropertySource注解加载。如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件。
还可以dos命令更改:
java -jar myapp.jar --spring.profiles.active=dev
主要的激活方式
-Dspring.profiles.active=dev
单元测试启动环境配置
在spring boot的单元测试中,若想启动其他环境的需要通过idea工具。
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserInfoMapperTest {
@Resource
PcUserInfoMapper pcUserInfoMapper;
@Resource
PcUserInfoService pcUserInfoService;
/**
* 添加
*/
@Test
public void addUser(){ //String name,String account
UserInfo userInfo = new UserInfo();
userInfo.setId(new Long((long) 0));
userInfo.setName("123师傅");
userInfo.setAccount("173607");
userInfo.setPassword("123456");
userInfo.setSalt("1");
userInfo.setImg(null);
userInfo.setCreateTime(null);
userInfo.setCreateUser(null);
userInfo.setUpdateTime(null);
userInfo.setUpdateUser(null);
userInfo.setStatus(true);
userInfo.setOpenId(null);
/*
int i = pcUserInfoMapper.addUsers(userInfo);
System.out.println(i);
*/
Boolean aBoolean = pcUserInfoService.addAccount(userInfo);
System.out.println(aBoolean);
}
/**
* 删除
*/
@Test
public void deleteUser(){
String name = "adsads4";
int i = pcUserInfoMapper.updateByName(name);
System.out.println(i);
}
/*
创建用户是是否存在
*/
@Test
public void ifExsits(){
List<Integer> adsads4 = pcUserInfoMapper.judge_if_user_exists("adsads4");
if (adsads4.size() != 0){
System.out.println("exist");
}else {
System.out.println("ok");
}
}
/*
查询所有
*/
@Test
public void selectAll(){
System.out.println(pcUserInfoService.selectAll().size());
}
@Test
public void fuzzySelect(){
pcUserInfoService.fuzzySelect(1,0,null,null);
}
}
点击最后一个
在图中红线所指的属性添加spring.profiles.active=dev
即可只能用key-value格式。
这样在启动时就会启动相应的环境: