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