Springboot的配置
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
分别是application.properties和application.yml
我们同样可以在Springboot的配置文件中配置端口号配置虚拟路径以及字面量数据,对象,集合,数组等
application.properties文件中配置
server.port=8081
person.last-name=张三
person.age=12
person.birth=2019/12/30
person.boss=false
person.lists=a,b,c
person.maps.k1=value1
person.maps.k2=value2
person.dog.name=大黄
person.dog.age=1
application.yml文件中的配置
1.YAML的基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,属性和值敏感大小写(参考上图);
2.值的写法
1.字面量普通的值(字符串,数字,布尔值):字面量直接写,格式: k: v:,
字符串默认不用加上单引号或者双引号;
“”:双引号;会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;不会转义特殊字符,特殊字符终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.对象
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
3.在springboot中,如何将配置文件中的属性注入到bean中
1.导入配置文件处理器(编写之后会有提示,非常方便)
<!--配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.分别提供实体类 Person Dog
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//提供 Get Set方法 toString方法
}
public class Dog {
private String name;
private Integer age;
//提供 Get Set方法 toString方法
}
3.在aplication.yml中为属性赋值
person:
lastName: Oscar
age: 19
boss: false
birth: 2019/10/10
maps: {k1: v1,k2: v2}
lists:
- eric
- kobe
dog:
name: 大黄
age: 2
4.在注入的Person的类上面添加注解
@Component //只有将这个配置在spring容器中,才能使用@ConfigurationProperties的功能
@ConfigurationProperties(prefix = "person")// 告诉springboot 将当前类的所有属性和配置文件中的相关信息进行绑定
public class Person {
·······
}
5.进行测试
@Autowired
private Person person;
@RequestMapping("person")
public Person helloSpringboot(){
System.out.println(person);
return person;
}
测试结果
{"id":1,"lastName":"张三","boss":false,"birth":"2019-12-29T16:00:00.000+0000","map":{"k1":"v1","k2":"v2"},"lists":["a","b","c"],"dog":{"id":1,"name":"大黄","age":1}}
4.常用的注解有哪些?
-
(1)@value 和@ConfigurationProperties
-
(2)@PropertySource
-
(3)@ImportResource
(1)@Value获取值和@ConfigurationProperties
两者都是用来为类中属性注入值,区别在于
两者最大的区别在于:@ConfigurationProperties支持数据校验,而@Value则不支持
在application.yml文件中 email的值只能是邮箱类型,否则启动报错。
小结:当我们只需要获取配置文件中某一个属性或对象的值,使用@value最简单,当需要批量获取数据时,比如:编写了一个JavaBean来和配置文件进行映射,我们就直接使用@configurationProperties
----------------------------------------我是分割线---------------------------------------------
(2)@PropertySource(获取局部的配置文件)
在前面的配置中,使用@ConfigurationProperties注解可以获取配置文件中的属性值。但是@ConfigurationProperties读取的配置文件是全局的,也就是说这个注解只能加载全局的配置文件,
但是全局配置文件一般定义的都是有关spring配置的信息。如果我们需要定义一些与spring配置无关的信息,那么该如何呢?
我们可以定义局部的配置文件,然后使用@PropertySource注解进行获取。具体步骤:
(1)定义emp.properties配置文件
(2)在yml文件中为属性赋值
emp.empName=kobe
emp.age=19
emp.email=risswen@sina.com
emp.isMarried=true
(3)@PropertySource 引入局部的properties配置文件
-----------------------------------------我也是分割线------------------------------------------
(3)@ImportResource用来识别XML配置文件,放在启动类上面,用法如下:
@SpringBootApplication
@ImportResource(locations = {"classpath:bean.xml"})//加载类路径下面的配置文件
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
定义一个UserSercice方法,使用xml配置文件的方式管理UserService类。
public class UserService {
public void test(){
System.out.println("这是UserService里面的方法");
}
}
定义bean.xml配置文件,管理bean
<bean id="userService" class="com.oracle.service.UserService"></bean>
测试
@RestController
public class controller {
@Autowired
ApplicationContext applicationContext;
@RequestMapping("/hello")
public String hello(){
UserService userService = (UserService) applicationContext.getBean("userService");
userService.test();
return "这是我的第一个springboot程序";
}
}
在springboot中,我们一般不用xml的方式去管理bean,因为springboot默认是不识别xml文件的,所以使用Java配置类的方式来管理bean
1.创建一个配置类
2.使用@configuration注解修饰这个类
3.在配置类中定义一个方法,管理Bean,这个方法使用@Bean注解修饰
4.方法的返回值是被管理的bean的类型,方法名就是bean的id
定义OrderService
public class OrderService {
public void test(){
System.out.println("这是OrderService里面的方法");
}
}
定义配置类
package com.oracle.config;
import com.oracle.service.OrderService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration// 指明当前类就是一个配置类,用来替代之前的配置文件<bean class=""></bean>
public class MyAppConfig {
@Bean //将方法的返回值添加到spring容器中,组件的默认id就是当前方法名
public OrderService orderService(){
return new OrderService();
}
}
测试调用
@RestController
public class controller {
@Autowired
ApplicationContext applicationContext;
@RequestMapping("/hello")
public String hello(){
OrderService userService = (OrderService) applicationContext.getBean("orderService");
userService.test();
return "这是我的第一个springboot程序";
}
}
总结:写完这个我有点晕,本来还信心满满的,准备把自己学到的知识和心得分享出来,没想到,写了几条就晕了,看来下回写之前要把思路捋清楚,再下笔。。。。。。。算了,我的脑子告诉我,它想休息一下,有错误的地方,请批评指正!!