我正在使用Spring
。我有一堆服务正由一个桌面应用程序使用。由于这不是一个分布式系统,所有服务都是应用程序本身的一部分,它们不是远程运行的(我知道这可能不太理想)。
我不想为每个服务使用不同的数据源,而是希望为所有服务使用相同的数据源,以减少数据库连接的数量。我使用BeanFactoryPostProcessor
实现了这一点。我将共享数据源注入到允许数据源的所有bean中。
我遇到的问题是虽然应用程序似乎正确加载,所有bean都正确初始化并且数据源注入没有问题,当我尝试在应用程序中执行任何操作时,我得到以下异常:
"org.springframework.transaction.IllegalTransactionStateException:
Pre-bound JDBC Connection found!
HibernateTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself.
It is recommended to use a single HibernateTransactionManager for all transactions on a single DataSource, no matter whether Hibernate or JDBC access."
我还必须提到我同时使用HibernateTransactionManagers
和DataSourceTransactionManagers
。处理DataSourceTransactionManagers
时使用JDBC
,HibernateTransactionManagers
用于使用Hibernate的服务。
我尝试使用TransactionAwareDataSourceProxy
来包装我的共享数据源,以便与DataSourceTransactionManagers
一起使用,但这没有任何效果。
上述异常是否意味着我可能需要使用单个事务管理器?