【发布时间】:2018-08-16 18:32:44
【问题描述】:
目前,我在使用 MongoDB 进行 Spring 身份验证时遇到问题。我的 Spring XML 配置文件中有以下声明:
Spring Boot 导入 Spring XML 文件: 我在“spring boot main class”中导入以下“spring configuration XML”文件,如下所示:
@SpringBootApplication
@ImportResource("classpath:META-INF/spring/Myapp-AppContext.xml")
public class MySpringBootApplication extends SpringBootServletInitializer {
.... //Some Code goes here
}
Spring 配置 XML 文件:
<mongo:mongo-client id="mongo" host="localhost" port="27017" credentials="admin:mypass@mydb">
<mongo:client-options description="Connection to DB"/>
</mongo:mongo-client>
<mongo:db-factory id="myConnection" mongo-ref="mongo" dbname="mydb"/>
<mongo:template id="myOps" db-factory-ref="myConnection"/>
<mongo:repositories
base-package="com.test.app" mongo-template-ref="myOps" />
在将其作为“Spring Boot 应用程序”运行时,我收到以下错误:
例外:
原因:org.springframework.beans.ConversionNotSupportedException:无法将类型“java.lang.String”的属性值转换为属性“凭据”所需的类型“com.mongodb.MongoCredential[]”;嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为属性“credentials [0]”所需的类型“com.mongodb.MongoCredential”:找不到匹配的编辑器或转换策略 在 org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:590) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:604) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:219) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1658) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1614) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1361) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:578) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE] ...省略了118个常用框架
异常原因:
根据我的理解,我认为 "Spring-data-Mongodb" JAR 缺少一个 "Converter" 实现,它可以转换 "credentials" 属性(它是一个字符串类型)到 "com.mongodb.MongoCredential" 数组。
请让我知道是否有另一个支持身份验证机制的“spring-data-mongodb”企业版或任何其他解决此问题的方法。
我的应用程序使用以下版本的软件:
- 使用的 Spring Boot 版本:2.0.2.RELEASE
- 使用的春季版本:5.0.6.RELEASE
- Spring 数据 MongoDB 版本:2.0.9.RELEASE
- Mongo 驱动版本:3.8.0
- Mongo Java 驱动程序版本:3.8.0
- Mongo Driver Core 版本:3.8.0(与 Mongo Java Driver JAR 交替使用,因为它们是相同的)
- Mongo 社区服务器版本:3.6.5
【问题讨论】:
-
请粘贴您如何导入spring xml文件的代码
-
我更新了我的“问题部分”,关于如何将“spring xml”文件导入“spring boot 主类”。我将此应用程序打包为 WAR 并将其部署到 Tomcat。因此,我的 Spring Boot 类正在扩展“SpringBootServletInitializer”类。
-
能贴一下MySpringBootApplication的代码吗?
-
你能分享一个项目来运行显示问题。 SD-MongoDB 有一个专用的
MongoCredentialPropertyEditor负责转换凭据字符串。
标签: spring mongodb spring-boot spring-data-mongodb