我的测试试图显示通过 Mule JDBC 出站端点发送的 SQL 语句成功执行。问题:在 Mule 上插入后,查询同一个表没有返回结果。
我正在使用 Spring JDBC 来测试该语句的结果。
在我的设置方法中,我使用通过 Spring JDBC 发送的 DDL 语句创建模式:
final JdbcTemplate _jdbcTemplate = new JdbcTemplate(new
SimpleDriverDataSource(new JDBCDriver(), "jdbc:hsqldb:mem:mydb"));
Mule JDBC 出站连接器也配置为指向 jdbc:hsqldb:mem:mydb
<spring:bean id="myDataSource" class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
<spring:property name="driverName" value="org.hsqldb.jdbc.JDBCDriver"/>
<spring:property name="url" value="jdbc:hsqldb:mem:mydb"/>
</spring:bean>
<jdbc:connector name="insertionConnector" dataSource-ref="myDataSource">
<jdbc:query key="insertion"
value="INSERT INTO mytable (TEST_KEY) VALUES (#[map-payload:_testkey])"/>
</jdbc:connector>
<custom-transformer name="objectFieldsToMap" class="com.mydomain.ObjectFieldsToMap"/>
<flow name="sendInsertion">
<vm:inbound-endpoint address="vm://insert"/>
<jdbc:outbound-endpoint queryKey="insertion" transformer-refs="objectFieldsToMap" connector-ref="insertionConnector"/>
</flow>
我验证了插入测试行并使用 Spring JDBC 两种方式查询它都有效。
我验证了通过出站端点发送相同的插入语句会返回更新的 1 行。
final MuleClient muleClient = MyFactory.muleClient();
final Date date = new Date();
final MyObject myObject = new MyObject.Builder().setTestKey("test").build();
muleClient.dispatch("vm://insert", myObject, null);
但是,当我使用 Spring JDBC 查询同一个表时,我得到一个空的结果集。
(String) _jdbcTemplate.queryForObject("SELECT TEST_KEY FROM MYDB.mytable", Class.forName("java.lang.String"));
在内部,Mule(使用 Apache DbUtils)在执行语句后提交,因此后续查询应该可以看到插入。我使用相同的 JdbcTemplate 对象来创建模式,然后查询结果。
帮助表示赞赏。谢谢你。