此項目的目的是在Spring Boot的生命週期中創建鉤子,在Liquibase執行其數據庫架構變更集之前。這些鉤子最終將被用來啓動/停止一個具有Postgres實例的Docker(或類似Docker的)容器。該項目必須能夠處理:從IDE(的IntelliJ,STS) @AutoConfigureBefore不會觸發
- 測試:運行
- 可執行的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
不能在我的項目中工作將非常感激。
我想你誤解了「之前」的意思。對於在其他配置類之前註冊一個_bean definition_有一個機會註冊之前,它沒有任何事情要做。我是否理解你認爲你可以用它在別的東西之前「跑」一些東西?這是一個配置類,而不是一個實際的bean,因此這不是一個語義。 –
['@ AutoConfigureBefore'](http://docs.spring.io/autorepo/docs/spring-boot/1.4.1.RELEASE/api/org/springframework/boot/autoconigure/AutoConfigureBefore.html)文檔說:「提示應該在其他指定的自動配置類之前應用自動配置。「記錄的效果正是我期待的效果。 –
@ stephane-nicoll,你作爲Spring Boot的核心提交者,並且考慮到我可能誤解了'@ AutoConfigureBefore',在給定上述限制的情況下,你會推薦我做些什麼? –