私の自動設定が正しく動作するようにするために問題があります。私は次の2つのjarを持っています。それぞれにspring.factoriesファイルがあり、この2つがEnableAutoConfigurationPropertiesに対して有効になっています。外部依存からSpringブートの自動構成の順序
この構成では、私のパッケージ-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が含まれていれば、Aが前回と同じように命じられ、B MyServiceが既に定義されているため、AutoConfigurationBは処理されないということです。 ただし、これらのjarを含む3番目のプロジェクトで使用すると機能しません。 AutoConfigureOrderアノテーションは、クラスパスからこれらのjarsをロードするときにスキップされ、これらの設定は、jvmがこれらのクラスをロードする順序で処理されるようです。私の特別なケースでは、まずBを行い、その時点でMyServiceはまだ定義されていないため、RealService Beanをインスタンス化します。これをどのように機能させることができますか?
明らかに、これは、モックの@Primaryアノテーションがジョブを実行する小さな例ですが、それは私が探しているものではありません。
編集:@SpringBootApplicationに注釈が付けられたメインがパッケージの一部ではなく、これらの設定が動作しているようです。例えば。注釈は "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);
}
}
ありがとうAndy、それは本当に私の問題を解決しました。奇妙な考えは、両方のコンフィグレーションクラスと@SpringBootApplicationが(別のプロジェクトの依存関係のジャーとしてではなく)自分自身で使用されている場合、正しく動作するということでした。私はそれがちょうど運が良かったのか、その場合は春の靴が違うかどうかはわかりません。 Eithee way、答えは受け入れました。ありがとう! –