Spring Boot配置绑定2.0实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/83348733

一 新建pom

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
    </dependency>
</dependencies>

二 application.properties

com.didispace.foo=bar
#推荐使用全小写配合-分割符的方式来配置
com.didispace.database-platform=sql
#使用[]来定位列表类型
#也支持逗号分隔方式,两种方式等价
#com.didispace.post=Why Spring Boot,Why Spring Cloud

com.didispace.post[0]=Why Spring Boot
com.didispace.post[1]=Why Spring Cloud
#Map类型的定义格式如下
com.didispace.posts[0].title=Why Spring Boot
com.didispace.posts[0].content=It is perfect!
com.didispace.posts[1].title=Why Spring Cloud
com.didispace.posts[1].content=It is perfect too!

三 PostInfo

package com.didispace;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties
public class PostInfo {

    private String title;
    private String content;

}

四 FooProperties

package com.didispace;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties(prefix = "com.didispace")
public class FooProperties {

    private String foo;

    public String getFoo() {
        return foo;
    }

    public String getDatabasePlatform() {
        return databasePlatform;
    }

    private String databasePlatform;

}

五 启动类

package com.didispace;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.context.ApplicationContext;

import java.util.List;


@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Application.class, args);

        Binder binder = Binder.get(context.getEnvironment());

        // 绑定简单配置
        FooProperties foo = binder.bind("com.didispace", Bindable.of(FooProperties.class)).get();
        System.out.println(foo.getFoo());

        // 绑定List配置
        List<String> post = binder.bind("com.didispace.post", Bindable.listOf(String.class)).get();
        System.out.println(post);

        List<PostInfo> posts = binder.bind("com.didispace.posts", Bindable.listOf(PostInfo.class)).get();
        System.out.println(posts);

        // 读取配置
        System.out.println(context.getEnvironment().containsProperty("com.didispace.database-platform"));
        System.out.println(context.getEnvironment().containsProperty("com.didispace.databasePlatform"));

    }

}

六 测试

bar
[Why Spring Boot, Why Spring Cloud]
[PostInfo(title=Why Spring Boot, content=It is perfect!), PostInfo(title=Why Spring Cloud, content=It is perfect too!)]
true
false

七 补充

属性的读取

对于一个属性我们可以有多种不同的表达,但是如果我们要在Spring应用程序的environment中读取属性的时候,每个属性的唯一名称符合如下规则:

  • 通过.分离各个元素

  • 最后一个.将前缀与属性名称分开

  • 必须是字母(a-z)和数字(0-9)

  • 必须是小写字母

  • 用连字符-来分隔单词

  • 唯一允许的其他字符是[和],用于List的索引

  • 不能以数字开头

八 参考

http://blog.didispace.com/Spring-Boot-2-0-feature-1-relaxed-binding-2/

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/83348733
今日推荐