版权声明:本文为博主原创文章,未经博主允许不得转载。 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/