這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在Spring Boot中配置元數(shù)據(jù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
配置元數(shù)據(jù)
作為開發(fā)人員,我們開發(fā)的大多數(shù)應(yīng)用程序在某種程度上必須是可配置的。但是在通常情況下,我們并不能夠真正的理解配置參數(shù)的作用,比如它有默認(rèn)值,又或者是過時的,有時我們甚至不知道該屬性的存在。
為了幫助我們理清楚,Spring Boot 生成了配置元數(shù)據(jù)的 JSON 文件,為我們提供關(guān)于如何使用屬性的有用信息。所以,配置元數(shù)據(jù)是一個描述性文件,它包含與配置屬性交互所需的必要信息。
這個文件的真正好處是IDE也可以讀取它,從而為我們自動配置完成Spring屬性以及其他配置提示。
依賴
為了生成此配置元數(shù)據(jù),我們將使用 spring-boot-configuration-processor 的依賴.
因此,讓我們繼續(xù)將依賴項添加為可選依賴 :
org.springframework.boot spring-boot-configuration-processor 2.1.7.RELEASE true
這種依賴關(guān)系將為我們提供在構(gòu)建項目時調(diào)用的 Java 注解處理器。我們稍后會詳細(xì)討論這個問題。
為了防止 @ConfigurationProperties 不應(yīng)用于我們的項目使用的其他模塊,在 Maven 中添加依賴項為可選依賴 是最好的做法。
配置屬性示例
現(xiàn)在來研究處理器是怎么工作的,我們需要使用 Java bean 獲取在 Spring Boot 應(yīng)用程序中包含一些屬性:
@Configuration @ConfigurationProperties(prefix = "database") public class DatabaseProperties { public static class Server { private String ip; private int port; // standard getters and setters } private String username; private String password; private Server server; // standard getters and setters }
要做到這一點,我們可以使用 @ConfigurationProperties 注解。配置處理器會掃描使用了此注解的類和方法,用來訪問配置參數(shù)并生成配置元數(shù)據(jù)。
讓我們將這些屬性添加到屬性文件中。在示例中,我們把文件命名為 databaseproperties-test.properties:
#Simple Properties database.username=baeldung database.password=password
我們還將添加一個測試,以確保我們都做對了:
@RunWith(SpringRunner.class) @SpringBootTest(classes = AnnotationProcessorApplication.class) @TestPropertySource("classpath:databaseproperties-test.properties") public class DatabasePropertiesIntegrationTest { @Autowired private DatabaseProperties databaseProperties; @Test public void whenSimplePropertyQueriedThenReturnsPropertyValue() throws Exception { Assert.assertEquals("Incorrectly bound Username property", "baeldung", databaseProperties.getUsername()); Assert.assertEquals("Incorrectly bound Password property", "password", databaseProperties.getPassword()); } }
我們通過內(nèi)部類 Server 還添加了嵌套屬性 database.server.id 和 database.server.port 。我們應(yīng)該添加內(nèi)部類 Server 以及一個 server 的屬性并且生成他的 getter 和 setter 方法。
在我們的測試中,讓我們快速檢查一下,確保我們也可以成功地設(shè)置和讀取嵌套屬性:
@Test public void whenNestedPropertyQueriedThenReturnsPropertyValue() throws Exception { Assert.assertEquals("Incorrectly bound Server IP nested property", "127.0.0.1", databaseProperties.getServer().getIp()); Assert.assertEquals("Incorrectly bound Server Port nested property", 3306, databaseProperties.getServer().getPort()); }
好了,現(xiàn)在我們準(zhǔn)備使用處理器了。
生成配置元數(shù)據(jù)
我們在前面提到過,配置處理器生成一個文件 – 它是使用注解處理實現(xiàn)的。
所以,在項目編譯之后,我們將在目錄 target/classes/META-INF 下看到文件名為 spring-configuration-metadata.json 的文件:
{ "groups": [ { "name": "database", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" }, { "name": "database.server", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceMethod": "getServer()" } ], "properties": [ { "name": "database.password", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" }, { "name": "database.server.ip", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server" }, { "name": "database.server.port", "type": "java.lang.Integer", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server", "defaultValue": 0 }, { "name": "database.username", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" } ], "hints": [] }
接下來,讓我們看看更改 Java bean 上的注解如何影響元數(shù)據(jù)。
關(guān)于配置元數(shù)據(jù)的其他信息
首先,讓我們將 JavaDoc 注釋添加到 Server 上.
第二,讓我們給出一個 database.server.port 字段的默認(rèn)值并最后添加 @Min 和 @Max 注解:
public static class Server { /** * The IP of the database server */ private String ip; /** * The Port of the database server. * The Default value is 443. * The allowed values are in the range 400-4000. */ @Min(400) @Max(800) private int port = 443; // standard getters and setters }
如果我們檢查 spring-configuration-metadata.json 文件,我們將看到這些額外的信息得到了反映:
{ "groups": [ { "name": "database", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" }, { "name": "database.server", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceMethod": "getServer()" } ], "properties": [ { "name": "database.password", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" }, { "name": "database.server.ip", "type": "java.lang.String", "description": "The IP of the database server", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server" }, { "name": "database.server.port", "type": "java.lang.Integer", "description": "The Port of the database server. The Default value is 443. The allowed values are in the range 400-4000", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server", "defaultValue": 443 }, { "name": "database.username", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties" } ], "hints": [] }
我們可以找到 database.server.ip 和 database.server.port 屬性的不同之處。事實上,額外的信息是非常有幫助的。開發(fā)人員和 IDE 都更容易理解每個屬性的功能。
我們還應(yīng)該確保觸發(fā)構(gòu)建以獲得更新的文件。在Eclipse中,如果選中“自動構(gòu)建”選項,則每個保存操作都會觸發(fā)一次構(gòu)建。在 IntelliJ 中,我們應(yīng)該手動觸發(fā)構(gòu)建。
理解元數(shù)據(jù)格式
讓我們仔細(xì)看看 JSON 元數(shù)據(jù)文件,并討論其組成。
Groups 是用于分組其他屬性的較高級別的項,而不指定值本身。在我們的例子中,我們有數(shù)據(jù)庫組,它也是配置屬性的前綴。我們還有一個 database 組,它是通過內(nèi)部類把 IP 和 port 屬性作為一個組。
屬性是可以為其指定值的配置項。這些屬性配置在后綴為 .properties或 .yml* 文件中,并且可以有額外的信息,比如默認(rèn)值和驗證,就像我們在上面的示例中看到的那樣。
提示是幫助用戶設(shè)置屬性值的附加信息。例如,如果我們有一組屬性的允許值,我們可以提供每個屬性的描述。IDE 將為這些提示提供自動選擇的幫助。
配置元數(shù)據(jù)上的每個組成都有自己的屬性。來解釋配置屬性的詳細(xì)用法。
springboot一種全新的編程規(guī)范,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個服務(wù)于框架的框架,服務(wù)范圍是簡化配置文件。
上述就是小編為大家分享的怎么在Spring Boot中配置元數(shù)據(jù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。