Внешний компонент Spring Boot DataSource - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать общую библиотеку, которая включает несколько вещей, необходимых моим микросервисам. Одной из таких вещей является функциональность ACL, обеспечиваемая Spring-Security. Моей первоначальной мыслью было инициализировать все связанные с ACL bean-компоненты из файла @Configuration в общей библиотеке, и каждый раз, когда микросервису нужна эта функциональность, я мог использовать аннотацию @Import (для моего проекта микросервиса), чтобы «включить» ее.

Для работы некоторых из этих компонентов требуется известный javax. sql .DataSource, поэтому в моей common библиотеке я автоматически подключил его следующим образом:

@Configuration
public class AclConfiguration {

@Autowired
DataSource dataSource 

Когда я решу, что я хочу, чтобы эта конфигурация имела место в моем go моем микросервисном проекте (скажем, RulesApplication) и в основном классе (аннотированном @SpringBootApplication), я делаю следующее

@SpringBootApplication
@EnableJpaRepositories
@EnableJpaAuditing
@EnableCaching
@Import(AclConfiguration.class)
public class RulesApplication {

.
.
.

Проблема в том, что DataSource bean-компонент не виден из общей библиотеки, хотя он создается должным образом (проверяется только путем удаления @Import).

Каждый раз, когда я импортирую конфигурацию из общей библиотеки, я получаю:

Caused by: java.lang.IllegalArgumentException: DataSource required
    at org.springframework.util.Assert.notNull(Assert.java:198) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]

Указывает, что компонент DataSource имеет значение null.

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 30 апреля 2020

Появление после некоторого копания. Реальных проблем с компонентом DataSource никогда не было. Все разочарование было создано двойным определением другого Бина в том же классе, что привело к неудачной инициализации всех бинов @Autowired.

В результате этого исследования (как упоминалось в других постах) инициализация бина работает гладко между общими проектами, поэтому в большинстве случаев эта ошибка возникает из-за двойного определения / неправильного определения других bean-компонентов.

...