Другая служба JAR создает автоконфигурацию Spring (Ошибка при создании bean-компонента с именем 'mongoTemplate') - PullRequest
0 голосов
/ 29 октября 2019

У меня есть одно приложение весенней загрузки Java (назовите его служебной службой) и много других приложений весенней загрузки Java (назовите их как клиенты).

Оба (сервисная служба и клиенты) используют автоконфигурацию Spring. Когда я пытаюсь поместить JAR служебной службы в клиент, после сборки клиента он выдает ошибку на bootrun. Ошибка:

Error creating bean with name 'mongoTemplate' defined in class path resource [org/springframework/boot/autoconfigure/data/mongo/MongoDataAutoConfiguration.class]: 
Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.data.mongodb.MongoDbFactory]: : 
Error creating bean with name 'mongoDbFactory' defined in class path resource [org/springframework/boot/autoconfigure/data/mongo/MongoDataAutoConfiguration.class]: 
Unsatisfied dependency expressed through constructor argument with index 0 of type [com.mongodb.MongoClient]: : 
Error creating bean with name 'mongo' defined in class path resource [org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.class]: 
Bean instantiation via factory method failed; 
nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [com.mongodb.MongoClient]: 
Factory method 'mongo' threw exception; 
nested exception is java.lang.NoSuchMethodError: 
org.bson.io.BasicOutputBuffer.<init>(I)V; 

Я могу решить эту проблему, применяя @EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) в клиентских Application.java.

Но у меня много таких клиентов, и я не хочу изменятькод клиента (кроме его build.gradle).

Есть ли какой-либо способ от служебной службы изменить и достичь выше?

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете попытаться исключить класс, когда включаете зависимость в любой из ваших клиентов. После исключения класса конфигурации mongoTemplate он не должен отображаться в вашем пути к классам при создании кода службы клиента.

Надеюсь, это поможет.

...