SpringBoot 之配置文件详解

本文提纲:

一.自动配置
二.自定义属性
三.多环境配置
四.Spring Boot的配置优先级
五.所需注解
六.小结

一.自动配置

Spring Boot提供了对应用进行自动化配置,相比以前XML配置的方式,很多显式的申明是不需要的。

二者,大多数默认的配置足够实现开发功能,从而更快速的开发。

什么是自动配置?

Spring Boot 提供了默认的配置,如默认的Bean, 去运行Spring应用,他是非侵入的,只提供

一个默认的实现。


二.自定义属性

闲话不多说,我们可以开始看代码,首先可以下载工程springboot_repository,项目地址见GitHub-https://github.com/snail-wj/springboot_repository.git

我们编写其CityProperties的java对象

package org.spring.springboot.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author Administrator
 * @date 2018/04/09
 */
@Component
@ConfigurationProperties(prefix = "city")
public class CityProperties {

    private Long id;

    private String cityName;

    private String desc;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "CityProperties{" +
                "id=" + id +
                ", cityName='" + cityName + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
通过@ConfigurationProperties(prefix="city")注解,将配置文件中以city前缀属性值自动绑定到

对应的字段中,同时用@Component作为Bean注入到Spring容器中

其中CityProperties对应的配置文件(aplication.properties)

#city的配置
city.id = 1
city.cityName = wlmq
city.desc = ${city.cityName} is most beautiful city

#user的配置
user.id = 2
user.userName = sunyanzi
user.desc = dev:${user.userName} is my god girl ~~

如果不是用application.properties文件,而是用application.yml文件,则对应配置如下:
city:
  id: 1
  cityName: 克拉玛依
  desc: ${city.cityName} is beautiful city!

键值对冒号必须空一格

项目首先会读取application.properties,如果没有的情况下,才会读取application.yml

注意这里,这个里面有个坑:

application.properties配置中文值的时候,读取出来的属性值会出现乱码。但是application.yml不会

出现乱码问题。原因hi,Spring Boot是以iso-8859的编码方式来读取application.properties文件。

注意这里,还有一个坑:

如果定义一个键值对user.name=xxx,这里会读取不到对应的属性值,为什么呢?Spring Boot的默认会

加载System.getProperty("user.name"),windows中机器会读当前登录的用户


三.多环境配置

很多场景的配置,比如数据库配置,Redis配置,注册中心和日志配置等。在不同环境下,我们需要不同的包去

运行项目。所以看项目结构,有两个环境的配置

application-dev.properties:正式环境
application-staging.properties:测试环境
Spring Boot是通过application.properties文件中,设置spring.properties属性,比如,配置了dev,则加载的是

application-dev.properties以及其属性的输出。

CityProperties{id=1, cityName='wlmq', desc='wlmq is most beautiful city'}
Spring Boot是通过application.properties文件中,设置spring.properties属性,比如,配置了dev,则加载的是

application-staging.properties以及其属性的输出。

CityProperties{id=1, cityName='北京', desc='北京 最好看的城市'}


四.Spring Boot的配置优先级

Spring Boot不单单从application.properties获取配置,我们可以在程序中多种设置配置属性,按照以下列表优先级
排列:

1.命令行参数
2.java:comp/env 里的 JNDI 属性
3.JVM 系统属性
4.操作系统环境变量
5.RandomValuePropertySource 属性类生成的 random.* 属性
6.应用以外的 application.properties(或 yml)文件
7.打包在应用内的 application.properties(或 yml)文件
8.在应用 @Configuration 配置类中,用 @PropertySource 注解声明的属性文件

9.SpringApplication.setDefaultProperties 声明的默认属性


五.所需注解

@Component , @Service , @Repository , @Controller将自动注册为Spring Beans。将被自动注册为Spring Beans

@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

依赖包的引入:pom.xml中仅依赖spring-boot-boot-starter-test,它吧相关的依赖全部引入

@RunWith(SpringRunner.class)告诉JUnit运行使用Spring的测试支持,Springrunner是SpringJUnit4ClassRunner的新名字,这个名字只是让名字看其简单些

@SpringBootTest的意思是"带有Spring Boot支持的引导程序"(例如,加载应用程序,属性,为我们提供Spring Boot的所有精华部分)


六.小结

感谢资料:https://www.bysocket.com/?p=1786

再次感谢泥瓦匠BYSocket文章的支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值