我想定义一个
<int-jdbc:outbound-gateway/>
与query
一起使用而没有update
从数据库中检索数据。然后,我想使用int-jdbc:outbound-gateway
作为Service.findSomeData()
接口方法的实现。从接口实现中检索的数据用在我的自定义转换器的CheckService
类中。请参阅以下配置:
<int:service-activator method=“performCheck”>
<bean class=“com.example.service.CheckService”
c:service-ref=“service”
</int:service-activator>
<int:gateway id=“service” service-interface=“com.example.service.Service”>
<int:method name=“findSomeData” request-channel=“jdbcChan” reply-channel=“jdbcChanReply”/>
</int:gateway>
<int-jdbc:outbound-gateway request-channel=“jdbcChan”
data-source=“pooledDs” row-mapper=“dataRowMapper” reply-channel=“jdbcChanReply”>
<int-jdbc:query>
select some, data from some_table
</int-jdbc:query>
问题是,当我将有效载荷移至ReplyRequiredException
时,我遇到了jdbcChan
异常:
org.springframework.integration.handler.ReplyRequiredException:处理程序'org.springframework.integration.jdbc.JdbcOutboundGateway#0'未产生任何答复,并且其'requiresReply'属性设置为true。
我决定更加关注位于GitHub上 spring-integration-samples 存储库中的spring中的example,但看起来它也无法按预期工作。我在尝试通过名称foo
查找用户的示例项目中遇到了完全相同的异常。您可以使用位于GitHub上的basic jdbc example和以下测试方法轻松重现异常:
@Test
public void findPerson() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"/META-INF/spring/integration/spring-integration-context.xml");
PersonService service = context.getBean(PersonService.class);
final List<Person> foo = service.findPersonByName("foo");
assertThat(foo, is(not(empty())));
}
我做错了还是最新的Spring Integration JDBC中有错误? (对我来说,即使示例已损坏)
答案 0 :(得分:2)
很久以前,我们将public class TData implements Serializable {
Matrix originalMatrix;
public Path path;
PointF position;
private TData attachedPathData;
public void setAttachedPathData(TData pathData){
attachedPathData = pathData;
}
public TData getAttachedPathData(){
return attachedPathData;
}
public TData(){
}
public TData(Path path, PointF position, String id, String fillColor, String strokeColor){
this.path = path;
this.position = position;
this.id = id;
this.fillColor = fillColor;
this.strokeColor = strokeColor;
}
public void Scale(float scaleX, float scaleY){
this.scaleX = scaleX;
this.scaleY = scaleY;
Matrix scaleMatrix = new Matrix();
RectF rectF = new RectF();
path.computeBounds(rectF, true);
scaleMatrix.setScale(scaleX,scaleY);
path.transform(scaleMatrix);
Matrix mat = new Matrix();
path.computeBounds(rf, true);
Region r = new Region();
}
}
的默认值更改为requires-reply
,但是示例从未更新。
true
但是,如果没有收到结果,则assertThat(foo, is(not(empty())));
是List<Person>
。
编辑
但是我希望如果ResultSet为空,则空列表而不是null。
那不是它的工作方式。
如果resultSet为空,则返回null
(因此,您看到的是原始错误)。
如果resultSet有1个条目,则仅返回该条目。
否则,将返回实体列表。
null
一直以来都是这样,但我相信单个对象Vs。列表有误(如果Object payload = list;
if (list.isEmpty()) {
return null;
}
if (list.size() == 1) {
payload = list.get(0);
}
return payload;
)。
maxRows > 1
默认情况下为1,因此有意义。但是,如果maxRows
> 1并且仅返回1行,我认为它应该仍然是1的列表。应用程序不必检查结果的类型。它期望一个列表或单个对象(或null)。 INT-4559。