gpt4 book ai didi

java - 无法将 Spring Batch MongoItemReader 上的属性的 Query 类型的值转换为所需类型 'java.lang.String'

转载 作者:行者123 更新时间:2023-11-30 05:30:55 34 4
gpt4 key购买 nike

我正在编写一个使用开箱即用的 MongoItemReader 的 Spring Batch 作业。我的工作是通过 XML 配置的。我通过接受类型 org.springframework.data.mongodb.core.query.Query 的 setter 设置“query”属性。

但是,偶尔,我的工作会由于类型错误而失败,但其他时候,尽管没有对代码进行任何更改,但它会顺利通过。

Caused by: java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.data.mongodb.core.query.Query' to required type 'java.lang.String' for property 'query': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:262)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:585)
... 27 more

以下是读取器 bean 的作业配置

    <!--  Job Definition  -->
<b:job id="reviewJob">
<b:step id="processReviews">
<b:tasklet>
<b:chunk reader="mongoItemReader"
processor="reviewProcessor"
writer="mongoItemWriter"
commit-interval="10" />
</b:tasklet>
</b:step>
</b:job>

<!-- Reader -->

<bean id="mongoItemReader" class="org.springframework.batch.item.data.MongoItemReader" >
<property name="template" ref="mongoTemplate" />
<property name="collection" value="Reviews" />
<property name="targetType" value="com.company.batch.model.Review" />
<property name="sort">
<map>
<entry key="id" value="#{T(org.springframework.data.domain.Sort.Direction).ASC}" />
</map>
</property>
<property name="query">
<bean class="com.company.batch.factory.MongoQueryFactoryBean" />
</property>
<property name="maxItemCount" value="10" />
</bean>

这是我的工厂 bean 类:

import org.springframework.beans.factory.FactoryBean;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

public class MongoQueryFactoryBean implements FactoryBean<Query> {

@Override
public Query getObject() throws Exception {
Query query = new Query();
Criteria criteria = new Criteria();
criteria.orOperator(
Criteria.where("status").is("A"),
Criteria.where("status").is("B")
);
query.addCriteria(criteria);
return query;
}

@Override
public Class<Query> getObjectType() {
return Query.class;
}

...

最佳答案

java.lang.IllegalStateException:无法将类型“org.springframework.data.mongodb.core.query.Query”的值转换为属性“query”所需的类型“java.lang.String”:没有匹配的编辑器或转换找到策略

上面的异常意味着它需要 String 但在字段查询中获取 Query 对象。

如果我查看 MongoItemReader 的规范

https://docs.spring.io/spring-batch/4.0.x/api/org/springframework/batch/item/data/MongoItemReader.html#setQuery-org.springframework.data.mongodb.core.query.Query-

它接受 String 或 org.springframework.data.mongodb.core.query.Query 类型的对象

在您的情况下,您将 FactoryBean 的对象设置为查询字段。

实现查询 Bean 或仅设置查询字符串。

关于java - 无法将 Spring Batch MongoItemReader 上的属性的 Query 类型的值转换为所需类型 'java.lang.String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580598/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com