#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, нажав «Запустить конфигурации» и выбрав приложение.