2016-11-21 75 views
0

此項目的目的是在Spring Boot的生命週期中創建鉤子,在Liquibase執行其數據庫架構變更集之前。這些鉤子最終將被用來啓動/停止一個具有Postgres實例的Docker(或類似Docker的)容器。該項目必須能夠處理:從IDE(的IntelliJ,STS) @AutoConfigureBefore不會觸發

  • 測試與Maven神火
  • 春天開機都跑

    • 測試:運行
    • 可執行的JAR
    • 整合在CI服務器上測試

    鑑於上述限制,最好的方法似乎是自動配置並指示它在Liquibase 。

    Auto-Configuration class已經被註釋:

    @ConditionalOnProperty(prefix = "docker_42", 
        name = "enabled", matchIfMissing = false) 
    @AutoConfigureBefore({LiquibaseAutoConfiguration.class }) 
    public class Docker42AutoConfiguration { 
    

    spring.factories有一個條目:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 
    nl._42.autoconfig.Docker42AutoConfiguration 
    

    整個(精簡)的項目可以在這裏找到:https://github.com/robert-bor/auto-configuration-question

    結果可能請通過以下方式驗證:

    • 設置項目在IDE &運行測試,或
    • 執行春季啓動:運行

    在春天啓動的日誌,你會看到Liquibase自定義自動配置之前執行。

    請注意,各種其他路線已經嘗試過(ApplicationListener,RunListener),但沒有一個在所有需要的道路上都很好。

    指針爲什麼@AutoConfigureBefore不能在我的項目中工作將非常感激。

  • +1

    我想你誤解了「之前」的意思。對於在其他配置類之前註冊一個_bean definition_有一個機會註冊之前,它沒有任何事情要做。我是否理解你認爲你可以用它在別的東西之前「跑」一些東西?這是一個配置類,而不是一個實際的bean,因此這不是一個語義。 –

    +0

    ['@ AutoConfigureBefore'](http://docs.spring.io/autorepo/docs/spring-boot/1.4.1.RELEASE/api/org/springframework/boot/autoconigure/AutoConfigureBefore.html)文檔說:「提示應該在其他指定的自動配置類之前應用自動配置。「記錄的效果正是我期待的效果。 –

    +0

    @ stephane-nicoll,你作爲Spring Boot的核心提交者,並且考慮到我可能誤解了'@ AutoConfigureBefore',在給定上述限制的情況下,你會推薦我做些什麼? –

    回答

    2

    您試圖將配置語義應用於某些運行時約束。自動配置是關於在上下文中提供的bean定義,最終將創建可以在組件中連接的bean實例。

    假設您需要bean Foo以自動配置某些內容。您需要確保FooAutoConfiguration在您的之前運行,以便上下文有機會包含Foo的bean定義。這在我們的last Devoxx university中有詳細解釋。

    您在評論中引用以任何方式並不意味着運行約束的文件:

    提示爲自動配置其他應指定自動配置類之前被應用。

    應用自動配置並不意味着由該配置創建的豆將會再配置創建的豆之前有效啓動。換句話說,你所做的是確保你的自動配置在liquibase自動配置有機會之前配置上下文。它並不意味着,將以這種順序創建將要創建的bean(我們還沒有)。

    如果這就是你想要做的,並且你沒有bean依賴,那麼你可以忘記所有這些,並創建一個bean生命週期依賴。這可能會非常棘手,因爲liquibase可能存在也可能不存在,但我們實質上是通過Hazelcast(請參閱the auto-configuration)來做到這一點。基本上,我們需要確保Hazelcast在啓動JPA容器之前啓動,以防將Hazelcast用作二級緩存。

    +0

    謝謝,斯蒂芬。該視頻是信息。提醒我明年預定Devoxx的一個位置。 Hazelcast的例子的確如此。早期的結果很有希望。 –