【问题标题】:Spring adding multiple GridFS templates in servlet-context.xmlSpring 在 servlet-context.xml 中添加多个 GridFS 模板
【发布时间】:2013-12-30 11:14:02
【问题描述】:

我是 Spring 框架的新手。我计划在下一个项目中使用两个 gridfs 模板。我想使用两个不同的数据库“ProductImage”和“ProfileImage”。根据用户上传的图像,应将图像插入相关数据库。所以我尝试如下配置我的application-context.xml

<!-- Mongo GridFs settings -->
    <!-- Connection to MongoDB server -->
    <mongo:db-factory host="192.168.1.3" port="27017"
        dbname="ProfileImages" />
    <mongo:mapping-converter id="converter"
        db-factory-ref="mongoDbFactory" />

    <!-- MongoDB GridFS Template -->
    <beans:bean id="gridTemplate"
        class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
        <beans:constructor-arg ref="mongoDbFactory" />
        <beans:constructor-arg ref="converter" />
    </beans:bean>

当我添加这个时,我的项目工作正常,但是当我添加时

<!-- Adding another mongo gridsfs -->
    <!-- Connection to MongoDB server -->
    <mongo:db-factory host="192.168.1.3" port="27017"
        dbname="ProductImages" />
    <mongo:mapping-converter id="ProductImages"
        db-factory-ref="mongoDbFactory" />

    <!-- MongoDB GridFS Template -->
    <beans:bean id="gridTemplate1"
        class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
        <beans:constructor-arg ref="mongoDbFactory" />
        <beans:constructor-arg ref="ProductImages" />
    </beans:bean>

我的程序抛出异常

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.springframework.data.mongodb.gridfs.GridFsOperations] is defined: expected single matching bean but found 2: [gridTemplate, gridTemplate1]

我还缺什么?

【问题讨论】:

    标签: spring spring-mvc gridfs spring-data-mongodb


    【解决方案1】:

    如果您使用@Autowired 注释并且有多个好的候选者(例如添加第二个定义bo GridFsTemplate 的情况),那么您需要使用另一个注释@Qualifier。否则spring怎么知道你想注入哪个gridfs实例?

    示例:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.data.mongodb.gridfs.GridFsTemplate;
    
    public class MyBean {
        @Autowired @Qualifier("gridTemplate") private GridFsTemplate fs1;
        @Autowired @Qualifier("gridTemplate1") private GridFsTemplate fs2;
    }
    

    编辑: 您还需要在 xml 配置中正确绑定 bean(您有两个 mongo:db-factory bean):

    <!-- Mongo GridFs settings -->
        <!-- Connection to MongoDB server -->
        <mongo:db-factory host="192.168.1.3" port="27017"
            id="profileImagesDbFactory"
            dbname="ProfileImages" />
        <mongo:mapping-converter id="profileImagesConverter"
            db-factory-ref="profileImagesDbFactory" />
    
        <!-- MongoDB GridFS Template -->
        <beans:bean id="gridTemplate"
            class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
            <beans:constructor-arg ref="profileImagesDbFactory" />
            <beans:constructor-arg ref="profileImagesConverter" />
        </beans:bean>
    
    <!-- Adding another mongo gridsfs -->
        <!-- Connection to MongoDB server -->
        <mongo:db-factory host="192.168.1.3" port="27017"
            id="productImagesDbFactory"
            dbname="ProductImages" />
        <mongo:mapping-converter id="ProductImages"
            db-factory-ref="mongoDbFactory" />
    
        <!-- MongoDB GridFS Template -->
        <beans:bean id="gridTemplate1"
            class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
            <beans:constructor-arg ref="productImagesDbFactory" />
            <beans:constructor-arg ref="ProductImages" />
        </beans:bean>
    

    【讨论】:

    • 您的代码适用于我,但现在它默认将所有图像插入“ProductImages”数据库中。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2016-02-16
    • 2016-12-24
    • 2016-04-05
    • 2017-03-21
    相关资源
    最近更新 更多