Spring批量MongoItemReader读取为json

时间:2014-04-09 18:53:09

标签: spring spring-batch spring-data-mongodb

我正在尝试编写一个Spring批处理作业,该作业从mongo db读取文档并将文档写入CMS(现在我将尝试使用WireMock进行测试)。我可以在不指定文档的确切结构的情况下设置作业和项目阅读器吗?我只想将每个文档作为json读取,然后将json发送到CMS。这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

由于JSON只是一个字符串,因此您应该为MongoItemReader类型配置String并为MongoTemplate提供一些自定义简单转换器:

public class DBObjectToStringConverter implements Converter<DBObject, String> {
  public String convert(DBObject source) {
    return source == null ? null : source.toString();
  }
}

这个只返回一个{J}表示DBObject

然后配置:

<mongo:db-factory/>

<mongo:mapping-converter id="mappingConverter">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="com.my.batch.mongo.DBObjectToStringConverter "/>
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg ref="mappingConverter"/>
</bean>

<bean class="org.springframework.batch.item.data.MongoItemReader">
    <property name="template" ref="mongoTemplate"/>
    <property name="query" value="..."/>
    <property name="targetType" value="java.lang.String"/>
</bean>

瞧!每个item都返回JSON字符串。