javascript
Spring Boot和应用程序上下文层次结构
Spring Boot支持一種指定Spring應(yīng)用程序上下文層次結(jié)構(gòu)的簡單方法。
這篇文章只是演示了此功能,我尚未在我從事的項目中很好地使用它。 Spring Cloud使用此功能來創(chuàng)建引導(dǎo)上下文 ,在該上下文中,如果需要,可以從外部配置服務(wù)器加載屬性,該屬性稍后可用于主應(yīng)用程序上下文。
為了快速退后一步, Spring Application Context管理著向其注冊的所有bean的生命周期。 應(yīng)用程序上下文層次結(jié)構(gòu)提供了一種重用bean的方法,可以在子上下文中訪問在父上下文中定義的bean。
考慮使用多個應(yīng)用程序上下文和應(yīng)用程序上下文層次結(jié)構(gòu)的人為設(shè)計用例–這是為兩個不同的端口提供兩個不同的端口,這些端口在每個端口處具有不同的端點集。
Child1和Child2是典型的Spring Boot應(yīng)用程序,遵循以下原則:
package child1;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import root.RootBean;@SpringBootApplication @PropertySource("classpath:/child1.properties") public class ChildContext1 {@Beanpublic ChildBean1 childBean(RootBean rootBean, @Value("${root.property}") String someProperty) {return new ChildBean1(rootBean, someProperty);} }每個應(yīng)用程序都駐留在其自己的根包中,以避免在掃描bean時發(fā)生沖突。 請注意,子上下文中的Bean依賴于預(yù)期來自根上下文的Bean。
要監(jiān)聽的端口是作為屬性提供的,因為我們希望這兩個上下文可以在不同的端口上進行監(jiān)聽,所以我已經(jīng)明確指定了要加載的屬性文件,其中包含以下內(nèi)容:
server.port=8080 spring.application.name=child1有了這個設(shè)置,Spring Boot提供了一個流暢的接口來加載根上下文和兩個子上下文:
SpringApplicationBuilder appBuilder =new SpringApplicationBuilder().parent(RootContext.class).child(ChildContext1.class).sibling(ChildContext2.class);ConfigurableApplicationContext applicationContext = appBuilder.run();SpringBootApplicationBuilder返回的應(yīng)用程序上下文似乎是鏈中的最后一個,通過上面的ChildContext2定義。
如果現(xiàn)在啟動應(yīng)用程序,則將存在帶有兩個不同子上下文的根上下文,每個子上下文均通過不同的端口公開端點。 通過/ beans執(zhí)行器端點的可視化顯示如下:
但是,并非所有事情都是干凈的,控制臺中顯示了與導(dǎo)出jmx端點有關(guān)的錯誤,但是這些信息僅供參考,似乎不會影響啟動。
樣本可以在我的github倉庫中找到
翻譯自: https://www.javacodegeeks.com/2016/12/spring-boot-application-context-hierarchy.html
總結(jié)
以上是生活随笔為你收集整理的Spring Boot和应用程序上下文层次结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果温度过高请冷却使用怎么解除
- 下一篇: 连续锁定2个不同的锁会死锁_研究死锁–第