一.SpringBoot配置文件认识
- SpringBoot中我们可以修改它的一个默认配置,这个直接在配置文件中完成即可。
- 配置文件有两种,一种是properties文件,一种是yml文件,大家任选一种使用即可
-
名称名必需是application.properties或者application.yml
application.properties修改端口:
server.port=8888
application.yml修改端口:
server: port: 8881
二.yaml文件的认识与使用
咱们写代码时肯定是要写配置文件,过去我们经常会使用properties,xml或者json来做配置,但是yaml是感觉写配置文件更加适合。
YAML 语言( /ˈjæməl/)的设计目标,就是方便人类读写。它专门用来写配置文件的语言,非常简洁和强大
2.1 YAML的编写规则
大小写敏感
使用缩进表示层级关系
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
缩进时不允许使用Tab键,==只允许使用空格=
冒号后面必需有空格
2.2 YAML的写法
YAML中可以写普通值(字符串,Boolean,Date等),对象与集合
2.2.1 普通值
- 字符串不需要加引号
- 如果加双引号(""),里面的内容会进行编译,比如说加一个 /n 就会换行
- 如果加单引号(''),里面的内容会正常显示,比如说加一个 /n 会显示出来
username: zhangage: 34sex: true
2.2.2 对象
- key-value键值对
employee: username: zhang age: 34 sex: true
- 行内写法
employee: {username: zhang,age: 34,sex: true}
2.2.3 集合数组
- 用 - 表示数组中一个元素
hobbys:
- java - php - h5
- 行内写法
hobbys: {java,php,h5}
2.3 yaml注入值(@ConfigurationProperties方式)
- 准备相应的domain
- Employee类
/**
* @Component:SpringBoot发现这个注解才会读取这个类,并且配置一个bean出来
* @ConfigurationProperties:SpringBoot发现这个注解,则会和配置中的数据与当前这个组件(bean)的值进行相应的绑定
* prefix:配置文件中的前缀名,相应的前缀对应配置中的前缀,数据再进行一一对应
*/@Component@ConfigurationProperties(prefix="emp")public class Employee {
private String username;
private String email;
private Integer age;
private Boolean sex;
private Date bornDate;
private List hobbys = new ArrayList();
private Department department;
//提供getter,setter与toString
}
- Department类
public****classDepartment {
public class Department {
private Long id;
private String name;
//提供getter,setter与toString
}
- 完成相应的yml配置
emp:
username: 张三
age: 12
sex: true
born-date: 1999/01/01
email: [email protected]
department: {id: 1, name: "IT部"}
hobbys: [java,php,python]
- 功能测试看到效果
@RunWith(SpringRunner.class)@SpringBootTest
public class SpringbootHelloConfigApplicationTests {
@Autowired
private Employee employee;
@Test
public void contextLoads() {
System.out.println(employee);
}
}
- 引入依赖加入
- 映射写配置时没有提示,我们可以加一个依赖
- 加上后,运行/测试一下 就可以有提示了
org.springframework.boot
spring-boot-configuration-processor
true
三.propertie的写法
3.1 解决idea中写properties的中文问题
3.2 application.properties
emp.username=小王
emp.age=32
emp.born-date=1999/01/01
emp.department.id=1
emp.department.name=俱乐部
[email protected]
emp.sex=true
emp.hobbys=java,h5,ui
四.Value方法注入值
4.1 value注入的三个方式
- 方式一:直接注入
- 方式二: 获取配置文件中的值
- 方式三: 写相应的计算表达式
@Component//@ConfigurationProperties(prefix="emp")public class Employee {
@Value("${emp.username}")
private String username;
private String email;
@Value("#{3*7}")
private Integer age;
@Value("false")
private Boolean sex;
...省略
}
4.2 value与直接注入的区别
五.加载指定的配置文件
5.1 加载局部配置文件(@PropertySource)
-
新建一个文件
在文件中添加内容
emp.username=小王
emp.age=32
emp.born-date=1999/01/01
emp.department.id=1
emp.department.name=俱乐部
[email protected]
emp.sex=true
emp.hobbys=java,h5,ui
- 读取相应的文件配置
@Component@ConfigurationProperties(prefix="emp")@PropertySource({"classpath:employee.properties"})
public class Employee {
private String username;
private String email;
}
5.2 加载XML文件(@ImportResource)
SpringBoot虽然提倡零配置,但是真实开发依然会遇到需要用到xml的情况,所以SpringBoot也提供了相应的方案让我们可以直接读取xml
@ImportResource(locations = {"classpath:application.xml"})@SpringBootApplication
public class Springboot02ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot02ConfigApplication.class, args);
}
}
5.3 自定义配置类向容器注入组件
- 准备配置类
- @Configuration:代表这是一个配置类
- @Bean:当前方法的返回值是一个bean
/**
* @Configuration:表示当前类是一个配置类(相当于一个配置文件)
*/@Configurationpublic class BeanConfig {
/**
* 把返回的值变成一个Bean,方法名就是bean的id
* @return
*/
@Bean
public Employee employeeService(){
return new Employee();
}
}
- 功能测试
@RunWith(SpringRunner.class)@SpringBootTestpublic class Springboot02ConfigApplicationTests {
@Autowired
private ApplicationContext applicationContext;
@Test
public void contextLoads() {
//根据名称获取对应的数据
Employee employee = (Employee)applicationContext.getBean("employeeService");
System.out.println(employee);
}
}