Я боролся с Монго, пытаясь настроить следующий Боб:
<bean id="someMongoOptions" class="SomeClassThatExtendFromMongoClientOptionsFactoryBean" scope="singleton">
<!--assume here other properties are injected, but just readPreference is the relevant one failing-->
<property name="readPreference" value="${some_value_here_for_this:PRIMARY}" />
</bean>
Я также использую CustomerEditorConfigurer
таким образом:
<bean id="myTestPropertyEditorRegistrar" class="org.springframework.beans.factory.config.CustomEditorConfigurer" scope="singleton">
<property name="propertyEditorRegistrars">
<list>
<bean class="myClass.MyTestPropertyEditorRegistrar" />
</list>
</property>
</bean>
public class MyTestPropertyEditorRegistrar implements PropertyEditorRegistrar {
@Override
public void registerCustomEditors(PropertyEditorRegistry registry) {
registry.registerCustomEditor(ServerAddress[].class, new ServerAddressPropertyEditor());
registry.registerCustomEditor(MongoCredential[].class, new MongoCredentialPropertyEditor());
registry.registerCustomEditor(ReadPreference.class, new ReadPreferencePropertyEditor());
registry.registerCustomEditor(WriteConcern.class, new WriteConcernPropertyEditor());
}
}
Я использую: mongo-java-driver 3.5.0 spring-data-mongodb 2.0.5.RELEASE
Насколько я понимаю, значение значения должно быть в порядке, и не должно бытьбольшое дело
Это соответствующая ошибка:
Не удалось преобразовать значение свойства типа 'java.lang.String' в требуемый тип 'com.mongodb.ReadPreference' для свойства 'readPreference';вложенное исключение - java.lang.IllegalStateException: невозможно преобразовать значение типа «java.lang.String» в требуемый тип «com.mongodb.ReadPreference» для свойства «readPreference»: не найдено подходящих редакторов или стратегии преобразования
Также эта часть может быть актуальной, поскольку я развертываю на уровне TRACE, чтобы увидеть, что может происходить при создании bean-компонентов:
DEBUG 36213 --- [main] org.springframework.beans.BeanUtils: Редактор свойств [com.mongodb.ReadPreferenceEditor] не найден для типа com.mongodb.ReadPreference в соответствии с соглашением суффикса 'Editor' TRACE 36213 --- [main] osbeans.TypeConverterDelegate
: Конструктор String не найден в типе [com.mongodb.ReadPreference]
java.lang.NoSuchMethodException: com.mongodb.ReadPreference. (java.lang.String) в java.lang.Class.getConstructor0 (Class.java:3082) ~ [na:1.8.0_192] в java.lang.Class.getConstructor (Class.java:1825) ~ [na: 1.8.0_192] в org.springframework.beans.TypeConverterDelegate.convertIfNecessary (TypeConverterDelegate.java:234) ~ [spring-beans-5.0.4.RELEASE.jar: 5.0.4.RELEASE] в org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNeeded (AbstractNestablePropertyAccessor.java --55)5.0.4.RELEASE.jar: 5.0.4.RELEASE] at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty (AbstractNestablePropertyAccessor.java:604) [spring-beans-5.0.4.RELEASE.jar: 5.0.4.RELEASE]в org.springframework.beans.BeanWrapperImpl.convertForProperty (BeanWrapperImpl.java:219) [spring-beans-5.0.4.RELEASE.jar: 5.0.4.RELEASE]