Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将类型查询的值转换为所需类型';java.lang.String';对于Spring批处理MongoItemReader上的属性_Java_Spring_Mongodb_Spring Batch_Spring Data Mongodb - Fatal编程技术网

无法将类型查询的值转换为所需类型';java.lang.String';对于Spring批处理MongoItemReader上的属性

无法将类型查询的值转换为所需类型';java.lang.String';对于Spring批处理MongoItemReader上的属性,java,spring,mongodb,spring-batch,spring-data-mongodb,Java,Spring,Mongodb,Spring Batch,Spring Data Mongodb,我正在编写一个Spring批处理作业,它使用现成的MongoItemReader。我的作业是通过XML配置的。我通过setter设置“query”属性,setter接受类型org.springframework.data.mongodb.core.query.query 但是,有时,我的作业会由于类型错误而失败,但有时它会通过ok,尽管没有对代码进行任何更改 Caused by: java.lang.IllegalStateException: Cannot convert value of t

我正在编写一个Spring批处理作业,它使用现成的
MongoItemReader
。我的作业是通过XML配置的。我通过setter设置“query”属性,setter接受类型
org.springframework.data.mongodb.core.query.query

但是,有时,我的作业会由于类型错误而失败,但有时它会通过ok,尽管没有对代码进行任何更改

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的作业配置


这是我的工厂bean类:

import org.springframework.beans.factory.FactoryBean;
导入org.springframework.data.mongodb.core.query.Criteria;
导入org.springframework.data.mongodb.core.query.query;
公共类MongoQueryFactoryBean实现FactoryBean{
@凌驾
公共查询getObject()引发异常{
查询=新查询();
标准=新标准();
标准操作器(
标准。其中(“状态”)为(“A”),
标准。其中(“状态”)为(“B”)
);
query.addCriteria(条件);
返回查询;
}
@凌驾
公共类getObjectType(){
返回Query.class;
}
...

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

上述异常意味着它需要字符串,但需要在字段查询中获取查询对象

如果我看一下MongoItemReader的规范

它接受类型为org.springframework.data.mongodb.core.query.query的字符串或对象

在本例中,您将FactoryBean的一个对象设置为查询字段


让您实现查询Bean或简单地设置查询字符串。

FactoryBean模式允许我使用基于XML的Bean配置更轻松地注入查询。查询主要使用更适合基于Java的Bean配置的生成器模式。如果我想利用类的生成器模式,我认为FactoryBean最适合他re.See似乎可以通过扩展自定义MongoItemReader并提供获取查询对象的自定义实现来实现您想要做的事情。MongoItemReader的当前实现不支持您想要的方式。Spring处理调用getObject()在幕后,因为我的类实现了我链接的博客文章中讨论过的FactoryBean。要明确的是,此配置大部分时间都有效,但偶尔会由于问题中所述的异常而失败。我也面临类似的问题。我正在使用xml来设置查询。在我的应用程序中,我们将查询设置为字符串和在我们从spring batch 3.X更新到spring batch 4.X之前,它一直工作得很好。在spring batch 3.X中,MongoItemReader中只有一个setQuery方法,而MongoItemReader中有两个setQuery方法,这似乎是应用程序混乱的原因。对我来说,它在启动后有时工作,而在其他时候则不工作。你找到了答案吗lution?@k_b我无法找到解决方案。我的应用程序是在本地临时使用的,因此虽然不适合生产环境,但我目前正在处理它。