带有TransactionTemplate和Connection Pool的JDBCTemplate,要使用哪个数据源

Fra*_*fka 6 database spring jdbc jdbctemplate transactionmanager

我不太确定如何制定这个问题,所以请随时告诉我,我在想完全错误.

我想用JdbcTemplateTransactionTemplate.我开始通过初始化我的连接池作为数据源并创建一个事务管理器作为数据源以及?

        BoneCPConfig connectionPoolConfig = new BoneCPConfig();
    connectionPoolConfig.setJdbcUrl(...);
    connectionPoolConfig.setUsername(...); 
    connectionPoolConfig.setPassword(...);
    connectionPoolConfig.setMinConnectionsPerPartition(...);
    connectionPoolConfig.setMaxConnectionsPerPartition(...);
    dataSource = new BoneCPDataSource(connectionPoolConfig);
    DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
    definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    transactionManager.setDataSource(dataSource);
Run Code Online (Sandbox Code Playgroud)

但现在我想创建我的TransactionTemplate和JdbcTemplate:

transactionTemplate = new TransactionTemplate(transactionManager);
JdbcTemplate jdbc = new JdbcTemplate(transactionManager.getDataSource());
Run Code Online (Sandbox Code Playgroud)

现在mulitple线程访问transactionTemplatejdbc.此代码是否保证所有内容都doInTransaction使用相同的连接进行所有jdbc调用?

连接是否以某种方式在内部链接,因为它看起来好像JdbcTemplate和TransactionTemplate可以使用他们想要的连接.我的代码是正确的/保存吗?

ska*_*man 6

这一切都应该没问题.关键部分是,JdbcTemplate并且DataSourceTransactionManager提供了相同的DataSource对象,您已经完成了.

此代码是否保证doInTransaction中完成的所有操作都对所有jdbc调用使用相同的连接?连接是否以某种方式在内部链接,因为它看起来好像JdbcTemplate和TransactionTemplate可以使用他们想要的每个连接.

在内部,Spring使用复杂的事务同步逻辑来确保事务,连接和数据源都正确同步(如果您有兴趣,请查看TransactionSynchronizationManager,虽然被警告,但这很可怕).

只要您通过API TransactionTemplateJdbcTemplateAPI 进行操作,它就可以在您不需要任何努力的情况下工作.但是,如果你开始手动从DataSource自己那里获取连接,那么所有的赌注都会被取消.