我应该如何获取/缓存/关闭 ConnectionContext (连接)?
我是否应该在 ItemWriter.open()中缓存上下文并缓存每个块的 ItemWriter.writeItems()
如果我想使用特定于DB2的API怎么办?
答案 0 :(得分:0)
推荐的方法通常是在每个块中运行的 writeItems()方法中对SQLJ使用get-use-close模式。这比在打开()中获取连接/上下文以及跨块的缓存更受青睐。
您可以使用 Connection.unwrap()方法进行特定于JDBC驱动程序的调用。
类似于:
public class MyDB2SQLJItemWriter implements ItemWriter {
DataSource myDataSource; // get via injection (not shown) or however
// ...
public void writeItems(List<Object items) throws Exception {
Connection con = myDataSource.getConnection();
DB2Connection db2Con = con.unwrap(DB2Connection.class);
db2Con.setPackagePath(currentPackagePath); // DB2-specific call
SqljCtx sqljCtx = new SqljCtx(db2Con);
// now do SQLJ
// close SqljCtx AND DB2Connection
sqljCtx.close();
}
也无需使用 enableConnectionCasting 属性配置您的dataSource(这增加了此处不需要的灵活性,并打开了与连接缓存相关的更复杂问题的大门)。
此建议扩展了在使用JDBC API时遵循WebSphere中的get-use-close模式的一般建议。让WebSphere执行连接池可以提供良好的性能,更好的资源利用率,并避免一些更复杂的池方案。