我有一個問題,試圖讓我的自動配置工作。我有兩個罐子,如下所示,每個罐子都有一個spring.factories文件,其中這兩個啓用了EnableAutoConfigurationProperties。從外部依賴性彈簧啓動自動配置順序
這種配置在我的包,mock.jar,這取決於下面我 - 封裝 - real.jar:
package org.packages.package.packageA;
@Configuration
@AutoConfigureBefore(AutoConfigurationB.class)
public class AutoConfigurationA {
@Bean
public MyService mockService() {
return new MyMockService();
}
}
這種配置在我的包,real.jar:
package org.packages.package.packageB;
@Configuration
@ConditionalOnMissingBean(MyService.class)
public class AutoConfigurationB {
@Bean
public MyService realService() {
return new MyRealService();
}
}
現在的想法是,如果包含my-package-mock.jar,那麼AutoConfigurationB將不會被處理,因爲A被命令在之前,並且到達B的時候MyService已經被定義。 但是,它在包含這些罐子的第三個項目中使用時不起作用。當從類路徑加載這些jar時,它看起來像AutoConfigureOrder註釋被跳過,並且這些配置按照jvm加載這些類的順序進行處理。在我的特殊情況下,它首先執行B,此時MyService尚未定義,因此將實例化RealService Bean。我怎樣才能使這個工作?
很明顯,這是一個小例子,模擬上的@Primary註釋可以完成這項工作,但這不是我正在尋找的。
編輯:如果@SpringBootApplication帶註釋的main不是包含這些配置的包的一部分,那麼這些配置就可以工作。例如。註解不在「org.packages.package」中,而是「org.somewhereelse」,那麼事情就會起作用。
package org.packages.package;
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(Collections.singletonList(TestApplication.class).toArray(), args);
}
}
謝謝安迪,那確實解決了我的問題。奇怪的想法是,當它們自己使用的配置類和@SpringBootApplication(例如,不是作爲另一個項目中的依賴關係jar)都能正常工作時。我不知道這是否只是運氣,或者那種情況下彈簧引導的行爲不同。 Eithee的方式,答案接受。謝謝! –