SimpleJdbcCall
无法调用多个程序
这是我的测试代码:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
public class TestCall {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "spring/applicationContext.xml",
"spring/applicationDb.xml" });
SimpleJdbcCall call = context.getBean("simpleJdbcCall",
SimpleJdbcCall.class);
call.withProcedureName("proc1").execute("p1", "p2");
System.out.println("CallString: " + call.getCallString());
call.withProcedureName("proc2").execute("p1");
System.out.println("CallString: " + call.getCallString());
}
}
在代码中,我定义了simpleJdbcCall
<bean id="simpleJdbcCall" class="org.springframework.jdbc.core.simple.SimpleJdbcCall" >
<constructor-arg ref="dataSource" />
</bean>
且程序proc1
收到2个参数,并且程序proc2
收到1个参数。
当我运行它时,发生了异常。
然后我调试并发现AbstractJdbcCall.callString
仍然存在
CallString:{call proc1(?, ?)}
致电proc2
。
那么,这是一个Spring的错误吗?
有没有人告诉我如何联系作者Thomas Risberg?
答案 0 :(得分:14)
那么,这是一个Spring的错误吗?
不,你只是错误地使用它。 SimpleJdbcCall
的{{3}}可能更明确,但确实说:
SimpleJdbcCall
是一个多线程,可重复使用的对象,表示对 a 存储过程或存储函数的调用。
换句话说,SimpleJdbcCall
的每个实例都配置为调用特定的存储过程。配置完成后,不应更改。
如果需要调用多个存储过程,则需要有多个SimpleJdbcCall
个对象。
答案 1 :(得分:0)
这个概念在spring参考文档中似乎并不十分清楚,因为那里的所有示例只有一个SimpleJdbcCall实例,它用于一个示例过程。
每个唯一存储过程的一个SimpleJdbcCall实例是需要的,而SimpleJdbcCall实例只需要初始化一次。一旦初始化,它们就是线程安全的。