最近有点忙,Spring Boot 的学习也搁置了一段时间了,今天来继续总结。看这篇之前可以先看看 上一篇 Spring Boot 入门学习总结(一)之工程搭建。
看过之前那篇文章,我们知道 Spring Boot 的优点是"习惯优于配置",一般都是在 pom.xml 中添加对应模块功能的依赖,然后在配置文件里面添加对应功能的配置就能完成相应的功能。也就是在
resouces 目录下的 application.properties 文件。。几乎所有的配置都是在这个文件里面配置的。
一、自定义配置属性
项目中使用到的常量,我们可以在配置文件中设置、在配置文件添加如下配置:
com.sunnada.name=张少林
com.sunnada.doSomething=正在学习Spring Boot
写法分析:键值对的形式 key = value。键是为了使用的时候可以通过对应的键拿到对应的 value 值。注意:value 值在配置文件中指定的时候不必要去指定数据类型,数据类型可以在获取的时候去动态定义
接下来在 Controller 中引用 配置好的常量值,定义全局变量,并添加注解 @Value(value = "${键值}")
表示引用配置好的常量值。
@RestController//表示以json格式输出数据
@RequestMapping(value = "/users")// 通过这里配置使下面的映射都在/users下
public class UserController {
@Value(value = "${com.sunnada.name}")
private String name;
@Value(value = "${com.sunnada.dosomething}")
private String doSomething;
@GetMapping("/doSomething")//表示get请求接口
public String getDoSomething() {
return name + doSomething;
}
}
用 postman 测试接口 http://127.0.0.1:8080/users/doSomething
发现输出乱码了,google 之后通过设置字符编码解决乱码问题。
解决IDEA 中读取配置文件中文乱码问题
在配置文件中添加:
banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
并且在 Setting 中设置字符编码为 utf-8:
设置字符编码.png再请求接口 返回 "张少林正在学习Spring Boot" 成功引用常量,又解决了字符乱码问题。
假如我们的需要配置的常量值不止两个,有十个,甚至二十个呢?在 Cntroller 里面需要引用 非常多次值,这样显然难以维护。可以把属性加载到实体 bean 中统一管理 ,最后注入 实体 bean 即可。
/**
* Created by 张少林 on 2017/6/17 0017.
* prefix = "com.sunnada" 在application.properties配置的属性前缀,
*
* 在类中的属性就不用使用{@value}进行注入了。
*/
@ConfigurationProperties(prefix = "com.sunnada")
public class UserConfig {
private String name;
private String doSomething;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDoSomething() {
return doSomething;
}
public void setDoSomething(String doSomething) {
this.doSomething = doSomething;
}
@Override
public String toString() {
return "UserConfig{" +
"name='" + name + '\'' +
", doSomething='" + doSomething + '\'' +
'}';
}
}
在启动类中加入:
@EnableConfigurationProperties({UserConfig.class})
指明要加载哪个bean。
@EnableConfigurationProperties({UserConfig.class})
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
最后在 Controller 中注入实体 bean 使用
@Autowired
UserConfig userConfig;
@GetMapping("/doSomething")
public String getDoSomething() {
return userConfig.getName() + userConfig.getDoSomething();
}
这样访问接口的接口是一样的,但是 简洁明了,易于维护。
二、参数间引用
在application.properties中的各个参数之间也可以直接引用来使用,就像下面的
com.sunnada.name=张少林
com.sunnada.doSomething=正在学习Spring Boot
com.sunnada.whoToDo=${com.sunnada.name}现在${com.sunnada.doSomething}
三、随机值配置
在一些情况下,有些参数我们需要希望它不是一个固定的值,比如密钥、服务端口等。Spring Boot的属性配置文件中可以通过${random}来产生int值、long值或者string字符串,来支持属性的随机值。
com.sunnada.secret=${random.value}
com.sunnada.number=${random.int}
com.sunnada.bignumber=${random.long}
com.sunnada.uuid=${random.uuid}
com.sunnada.number.less.than.ten=${random.int(10)}
com.sunnada.number.in.range=${random.int[1024,65536]}
常见的样板设置在官网可以查看:
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
参考链接:
- http://blog.didispace.com/springbootproperties/
- http://tengj.top/2017/02/28/springboot2/
- http://412887952-qq-com.iteye.com/blog/2307104
- http://www.bysocket.com/?p=1786
张少林同学.jpg更多原创文章会在公众号第一时间推送,欢迎扫码关注 张少林同学
网友评论