Переключение между профилями для управления несколькими реализациями в одном интерфейсе Spring

#java #spring-boot

#java #spring-загрузка

Вопрос:

Я пытаюсь использовать разные реализации интерфейса Spring с разными профилями. У меня есть несколько модулей, которые имеют код в разных модулях. Интерфейс и 2 реализации находятся в модуле, а класс, вызывающий интерфейс, находится в другом модуле. Мой код выглядит примерно так:

из module1:

 public class FirstService {

    @Autowired
    private Interface interfaceImplementation;
}
  

из module2:

 public interface Interface {

}
  
 @Service
@Profile("develop")
public class InterfaceImpl1 implements Interface {

}
  
 @Service
@Profile("test")
public class InterfaceImpl2 implements Interface {

}
  

при запуске моего приложения не удалось запустить приложение со следующей ошибкой:

 Field interface in FirstService required a bean of type Interface that could not be found
  

Спасибо за помощь.

Комментарии:

1. Как вы запускаете свое приложение? Вы включаете один из профилей при запуске приложения?

2. У меня есть <свойства> <spring.profiles.active>разработка</spring.profiles.active> </properties> в моем pom-файле. Я попытался запустить через eclipse и из командной строки с помощью этой команды: java -jar -Dspring.profiles.active=разработка myApplication.jar . Это не удается, каким бы способом я ни пытался. Спасибо.

3. У меня установлен профиль разработки по умолчанию в моем pom. Спасибо <profile> <id>разработка</id> <активация> <activeByDefault>true</activeByDefault> </activation> <свойства> <spring.profiles.active>разработка</spring.profiles.active> </свойства> </profile>

Ответ №1:

Я смог исправить эту проблему, добавив базовый пакет интерфейса, реализации, которые находятся в отдельном модуле, в @ComponentScan в приложении.

Ответ №2:

Пока ваше приложение запускается в вашем профиле по умолчанию, поэтому не будет компонента типа «Интерфейс», потому что в вашем коде реализация «Interace» будет создана spring только в том случае, если ваше приложение запущено в профиле «разработка» или «тестирование». существует несколько способов установки профиля в spring, и проще всего установить его в качестве системного параметра или переменной среды

Например, установка в качестве системного параметра

-Dspring.profiles.active=develop или -Dspring.profiles.active=test (в зависимости от того, в какой среде вы работаете)

Например, установка в качестве переменной среды

linux: — export spring_profiles_active=true windows:- set spring_profiles_active=true

Комментарии:

1. Как упоминалось выше, профиль разработки установлен по умолчанию в моем файле pom. Когда я запускаю свое приложение из eclipse, я добавил переменную среды spring.profiles.active, нажав «Запустить конфигурации» и выбрав приложение.