springboot学习日记(二)
学习如何获取配置文件的自定义配置,以及多环境下的配置文件信息获取,以下所有代码都可以从文末链接获取
新建两个配置类
ApplicationProperty.java
/**
* <p>
* 项目配置
* </p>
*
* @author yangkai.shen
* @date Created in 2018-09-29 10:50
*/
@Data
@Component
public class ApplicationProperty {
@Value("${application.name}")
private String name;
@Value("${application.version}")
private String version;
}
DeveloperProperty.java
/**
* <p>
* 开发人员配置信息
* </p>
*
* @author yangkai.shen
* @date Created in 2018-09-29 10:51
*/
@Data
@ConfigurationProperties(prefix = "developer")
@Component
public class DeveloperProperty {
private String name;
private String website;
private String qq;
private String phoneNumber;
}
对上述代码中出现的一些注解做一些解释
1、@Data注解
@Data
需要安装lombok插件,具体是在maven依赖中添加如下代码:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
创建一个实体类
import lombok.Data;
@Data
public class MyTestBean {
private Integer id;
private String name;
private String password;
}
测试代码
public class TestMyBean {
public static void main(String[] args){
MyTestBean m=new MyTestBean();
m.setId(1);
m.setName("lyk");
m.setPassword("123456");
System.out.println(m);
}
}
输出结果为MyTestBean(id=1, name=lyk, password=123456)
部分扩展知识:
- @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法
- @Getter/@Setter : 注解在类上, 为类提供读写属性
- @ToString : 注解在类上, 为类提供 toString() 方法
- @Log4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象
2、@Component注解
在介绍@Component
注解之前,先列出几个常见注解:
- @Controller:controller控制器层(注入服务)
- @Service :service服务层(注入dao)
- @Repository :dao持久层(实现dao访问)
- @Component:标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的
)
注解本质上就是一个类,开发中我们可以使用注解取代xml配置文件
@Component("xxx")
相当于给随后定义的类配置了ID
可以通过getBean("xxx")
来获取对应Bean
3、@ConfigurationProperties 与 @Value
Spring源码中大量使用了ConfigurationProperties注解,比如server.port
就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。
该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上。
Spring的有效运行是通过上下文(Bean容器)中Bean的配合完成的,Bean可以简单理解成对象,有些对象需要指定字段内容,那么这些内容我们可以通过配置文件进行绑定,然后将此Bean归还给容器。
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便
@ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”
通过@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:
application.properties在springboot启动时默认加载此文件
自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量,如${anotherfile.configinject}
PropertyController.java
package com.xkcoding.properties.controller;
import cn.hutool.core.lang.Dict;
import com.xkcoding.properties.property.ApplicationProperty;
import com.xkcoding.properties.property.DeveloperProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 测试Controller
* </p>
*
* @author yangkai.shen
* @date Created in 2018-09-29 10:49
*/
@RestController
public class PropertyController {
private final ApplicationProperty applicationProperty;
private final DeveloperProperty developerProperty;
@Autowired
public PropertyController(ApplicationProperty applicationProperty, DeveloperProperty developerProperty) {
this.applicationProperty = applicationProperty;
this.developerProperty = developerProperty;
}
@GetMapping("/property")
public Dict index() {
return Dict.create().set("applicationProperty", applicationProperty).set("developerProperty", developerProperty);
}
}
注册一个控制器,用于返回所获取的配置信息
输入http://localhost:8080/demo/property
来访问
得到如下结果
参考资料:
https://github.com/xkcoding/spring-boot-demo/tree/master/demo-properties
https://blog.csdn.net/qq_37433657/article/details/83275051
https://blog.csdn.net/qq_37606901/article/details/91357882