问题描述
我正在使用具有多个数据源(迎合多个 mysql dbs)并使用 tomcat dbcp 的 spring.我收到了一些奇怪的例外,比如
I am using spring with have multiple datasources (catering to multiple mysql dbs) and using tomcat dbcp. I am getting some weird exceptions like
- 未找到过程 - 当 proc 确实存在于数据库中时
- 不能从池中借用 - 本地开发设置,所以池肯定没有满
我觉得可能是这个问题,需要大家的意见:
the Problem I feel might be this, need inputs from everyone:
我在我的 spring.xml
中定义了一个 jdbcTemplate
对象,对于我需要触发的每个查询,我调用 jdbcTemplate.setDataSource()
code> 设置适当的数据源,然后使用 simplejdbccall(jdbctemplate)
来执行过程.
I have one jdbcTemplate
object defined in my spring.xml
, on every query that I need to fire, I call jdbcTemplate.setDataSource()
to set the appropriate datasource and then use simplejdbccall(jdbctemplate)
to execute the proc.
我是否还应该定义多个 jdbcTemplate
对象,即每个定义的数据源一个.我在 jdbctemplate
上设置数据源并执行存储过程的 bean 被定义为 prototype
.
Should I go in for also defining multiple jdbcTemplate
objects, i.e. one for each datasource defined. The bean from where I am setting the datasource on the jdbctemplate
and executing the stored proc is defined as prototype
.
推荐答案
如果您要不断更改 DataSource
,您当然不应该使用共享的 JdbcTemplate
.设置一次 DataSource
,不要管它.
You should certainly not use a shared a JdbcTemplate
if you're going to keep changing its DataSource
. Set the DataSource
once, and leave it alone.
这要么意味着多个 JdbcTemplate
bean,每个 DataSource
一个,或者手动创建新的 JdbcTemplate
对象,按需,不要分享它们.创建新的没有显着的性能开销,这不是问题.
That either means multiple JdbcTemplate
beans, one for each DataSource
, or create new JdbcTemplate
objects manually, on demand, and don't share them. There's no significant performance overhead in creating new ones, do that's not an issue.
当然,您可以将它们定义为 prototype
,但如果您要手动注入 DataSource
,则没有多大意义.也可以使用 new
实例化 JdbcTemplate
.
You could define them as prototype
, sure, but there's not much point if you're going to inject the DataSource
manually. Might as well instantiate JdbcTemplate
using new
.
这篇关于带有 Tomcat DBCP 和多个数据源的 Spring JDBC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!