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