Spring Boot配置繫結2.0實戰
阿新 • • 發佈:2018-11-03
一 新建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/