Java技术分享

Spring Boot 入门学习总结(二)之配置文件

2017-06-18  本文已影响84人  张少林同学
加油.png

最近有点忙,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

参考链接:

更多原创文章会在公众号第一时间推送,欢迎扫码关注 张少林同学

张少林同学.jpg
上一篇下一篇

猜你喜欢

热点阅读