SpringBoot入门之分散配置

Posted 木易森林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot入门之分散配置相关的知识,希望对你有一定的参考价值。

  springboot默认支持两种格式的配置文件:.properties和.yml。其中.properties是属性文件,也是最常用的一种;.yml是yaml格式的文件,yaml是一种简洁的标记语言。例如:在properties文件中定义的spring.data.url,在yaml文件中的定义如下

spring:
    data:
        url:

  从上可以发现yaml层次感更强,具体在项目中选择那种资源文件是没有什么规定的。

spring boot配置

简单案例

  首先创建application.properties文件,并定义name=ysl,创建一个名问Name的java类

package com.ysl.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class User {

    @Value("${name:wdd}")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  在TestController中调用User对象

package com.ysl.controller;

import com.ysl.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class TestController {

    @Autowired
    private User user;

    @RequestMapping(value = "/{name}",method = RequestMethod.GET)
    @ResponseBody
    public String home(@PathVariable("name") String name){
        return "hello," + name;
    }

}

启动该spring boot工程,在浏览器输入http://localhost:8080/ddd,显示出hello,wdd

解析

  1.在springboot中默认加载classpath:/,classpath:/config/,file:./,file:./config/ 路径下以application命名的property或yaml文件;

  2.参数spring.config.location设置配置文件存放位置

  3.参数spring.config.name设置配置文件存放名称

配置文件获取随机数

   在springboot中调用Random中的方法可以获取随机数,实例如下:在application.properties中增加age=${random.int},同事修改User对象。会为age生成一个随机值。

@Value("${age}")
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

  使用random的时候也可以限制随机数的范围,实例如下:

${random.int(100)} : 限制生成的数字小于10
${random.int[0,100]} : 指定范围的数字

在配置文件调用占位符

修改配置文件:

name=ysl
age=${random.int}
remark=hello,my name is ${name},age is ${age}

修改bean: 

@Value("$remark")
    private String remark;

可以发现将name修改为userName,在配置文件中调用${name}是工程名

去掉@Value

  大家可以发现前面在bean中调用配置参数使用的为注解@Value,在spring boot中是可以省去该注解。

  配置文件:

userName=liaokailin
age=${random.int[0,100]}
remark=hello,my name is ${userName},age is ${age}
user.address=china,hangzhou

  增加user.address=china,hangzhou,为了调用该参数来使用@ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "user")
public class User {

    private @Value("${userName:lkl}") String name;
    private @Value("${age}") Integer         age;
    private @Value("${remark}") String       remark;
    private String                           address;

  使用@ConfigurationProperties需要指定prefix,同时bean中的属性和配置参数名保持一致。

实体嵌套配置

@Component
@ConfigurationProperties(prefix = "user")
public class User {

    private @Value("${userName:lkl}") String name;
    private @Value("${age}") Integer         age;
    private @Value("${remark}") String       remark;
    private String                           address;
    private Address                          detailAddress;
public class Address {

private String country;
private String province;
private String city;
}

配置文件:

userName=liaokailin
age=${random.int[0,100]}
remark=hello,my name is ${userName},age is ${age}
user.address=china,hangzhou
user.detailAddress.country=china
user.detailAddress.province=zhejiang
user.detailAddress.city=hangzhou

这种嵌套关系如果通过yaml文件展示出来层次感会更强。

user:
    detailAddress:
        country:china
        province:zhejiang
        city:hangzhou

配置集合

一个人可能有多个联系地址,那么地址为集合

 @Component
@ConfigurationProperties(prefix = "user")
public class User {

    private @Value("${userName:lkl}") String name;
    private @Value("${age}") Integer         age;
    private @Value("${remark}") String       remark;
    private String                           address;
    private Address                          detailAddress;
    private List<Address>                    allAddress = new ArrayList<Address>();

配置文件:

user.allAddress[0].country=china
user.allAddress[0].province=zhejiang
user.allAddress[0].city=hangzhou

user.allAddress[1].country=china
user.allAddress[1].province=anhui
user.allAddress[1].city=anqing

多配置文件

  spring boot设置多配置文件很简单,可以在bean上使用注解@Profile("development")即调用application-development.properties|yml文件,也可以调用SpringApplication中的etAdditionalProfiles()方法。

也可以通过启动时指定参数spring.profiles.active



  

以上是关于SpringBoot入门之分散配置的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot入门之基于Druid配置Mybatis多数据源

Spring Boot入门教程大纲

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之自动包规则原理

SpringBoot入门之基于注解的Mybatis

Java之Spring Boot入门到精通IDEA版(一篇文章精通系列)上