У меня возникли проблемы с попыткой настроить мою автоконфигурацию. У меня есть два баночки, каждый из которых имеет файл spring.factories, где эти два включены для EnableAutoConfigurationProperties.Конфигурация конфигурации конфигурации Spring Boot от внешней зависимости
Эта конфигурация в моем-пакет-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. Однако он не работает при использовании в третьем проекте, который включает эти банки. Похоже, что аннотация AutoConfigureOrder пропускается при загрузке этих банок из пути к классам, и эти конфигурации обрабатываются в том порядке, в котором jvm загружает эти классы. В моем конкретном случае это B сначала, и в этот момент MyService еще не определен и, таким образом, будет создавать экземпляр компонента RealService. Как я могу заставить это работать?
Очевидно, что это небольшой пример, когда аннотация @Primary на mock будет выполнять эту работу, но это не то, что я ищу.
Редактирование: кажется, что аннотация @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, где они использовались сами (например, не как барабан зависимости в другом проекте), они работали правильно. Я не знаю, было ли это просто удачей, или что весенняя загрузка ведет себя по-другому в этом случае. Идите, ответ принят. Благодаря! –