我正在将代码切换为使用连接提供程序而不是配置。在这个过程中,我已经失去了使用我用来记录我的SQL语句的自定义执行监听器。
所以有几个问题:
我在“发布”方法中添加了什么?
conn = DriverManager.getConnection( url, userName, password );
conn.setSchema( schema );
configuration = new DefaultConfiguration().set( conn ).set( SQLDialect.MYSQL );
configuration.set( new DefaultExecuteListenerProvider( new IFSCustomJOOQExecuteListener( true, true ) ) );
aDSL = DSL.using( configuration );
我将其切换,现在看起来像这样:
IFSConnectionProvider ifsConnectionProvider = new IFSConnectionProvider();
aDSL = DSL.using( ifsConnectionProvider, SQLDialect.MYSQL );
以下是连接提供程序的代码(删除了不相关的行):
public class IFSConnectionProvider implements ConnectionProvider
{
protected Connection conn;
protected Configuration configuration;
@Override
public Connection acquire() throws DataAccessException
{
try
{
if (conn == null)
{
conn = DriverManager.getConnection( url, userName, password );
conn.setSchema( schema );
conn.setAutoCommit( false );
configuration = new DefaultConfiguration().set( conn ).set( SQLDialect.MYSQL );
configuration.set( new DefaultExecuteListenerProvider( new IFSCustomJOOQExecuteListener( true, true ) ) );
}
return conn;
}
catch (SQLException ex)
{
... yada yada yada ...
}
}
@Override
public void release( Connection connection ) throws DataAccessException
{
// TODO Auto-generated method stub
// do i need to do a release?
}
}
答案 0 :(得分:1)
这里有几件值得一提的事情:
我正在将代码切换为使用连接提供程序而不是配置
您仍在使用配置。因为在引擎盖下,总是有一个配置,即使它是为你创建的,包裹你的连接提供者。
- 如果我使用的是connectionProvider,有没有办法使用自定义侦听器?
醇>
这两件事是无关的。无论如何,在某些时候你需要将两者放在你的配置中
- 甚至不需要配置?
醇>
是的,这是必要的。问题是你是否需要自己创建一个。如果您只是将连接提供程序传递给DSL.using()
(这只是便利API!它会为您创建配置),那么您并不需要。
但是如果你想使用执行监听器,你需要自己手动创建一个配置。
- 我在"发布"中放入了什么?方法
醇>
在您的情况下,您将永远不会在发布方法中执行任何操作,因为您自己创建了独立连接。创建连接的逻辑应该关闭它,而不是jOOQ(即不是"发布")
public class IFSConnectionProvider implements ConnectionProvider { protected Connection conn; protected Configuration configuration;
我担心这会因为两个原因而无法前往任何地方:
我认为整个问题是由于对jOOQ的各种SPI的误解造成的: