Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Tomcat DBCP和多个数据源的Spring JDBC_Java_Spring_Multiple Databases_Spring Jdbc - Fatal编程技术网

Java 使用Tomcat DBCP和多个数据源的Spring JDBC

Java 使用Tomcat DBCP和多个数据源的Spring JDBC,java,spring,multiple-databases,spring-jdbc,Java,Spring,Multiple Databases,Spring Jdbc,我正在使用spring,它有多个数据源(支持多个mysql数据库)并使用tomcat dbcp。我有一些奇怪的例外,比如 找不到过程-当数据库中肯定存在该过程时 无法从池借用-本地开发人员安装程序,因此池肯定未满 我觉得问题可能在于,需要每个人的投入: 我在我的spring.xml中定义了一个jdbcTemplate对象,在我需要触发的每个查询上,我调用jdbcTemplate.setDataSource()来设置适当的数据源,然后使用simplejdbccall(jdbcTemplate)

我正在使用spring,它有多个数据源(支持多个mysql数据库)并使用tomcat dbcp。我有一些奇怪的例外,比如

  • 找不到过程-当数据库中肯定存在该过程时
  • 无法从池借用-本地开发人员安装程序,因此池肯定未满
我觉得问题可能在于,需要每个人的投入:

我在我的
spring.xml
中定义了一个
jdbcTemplate
对象,在我需要触发的每个查询上,我调用
jdbcTemplate.setDataSource()
来设置适当的数据源,然后使用
simplejdbccall(jdbcTemplate)
来执行该过程


我是否也应该定义多个
jdbcTemplate
对象,即为每个定义的数据源定义一个对象。我在
jdbctemplate
上设置数据源并执行存储过程的bean被定义为
prototype

如果要继续更改其
数据源,您当然不应该使用共享的
jdbctemplate
。将
数据源设置一次
,然后将其单独放置

这意味着多个
JdbcTemplate
bean,每个
DataSource
对应一个bean,或者根据需要手动创建新的
JdbcTemplate
对象,并且不共享它们。在创建新的过程中没有显著的性能开销,这不是问题


当然,您可以将它们定义为
prototype
,但是如果您要手动注入
数据源
,则没有多大意义。不妨使用
new
实例化
JdbcTemplate
,如果您要不断更改其
数据源
,您当然不应该使用共享的
JdbcTemplate
。将
数据源设置一次
,然后将其单独放置

这意味着多个
JdbcTemplate
bean,每个
DataSource
对应一个bean,或者根据需要手动创建新的
JdbcTemplate
对象,并且不共享它们。在创建新的过程中没有显著的性能开销,这不是问题


当然,您可以将它们定义为
prototype
,但是如果您要手动注入
数据源
,则没有多大意义。不妨使用
new
实例化
JdbcTemplate

谢谢您的回答。通过每次创建一个新的jdbctemplate实例,我克服了这些错误。我还更新了最新的mysql jconnector jsr(5.1.14) 现在的类设计非常简单。我有一个基本dao,它使用一个自定义编写的SpringJDBC包装器的新实例,该包装器将jdbcTemplate对象实例化为实例变量。对于每个请求,在SimpleJDBCall的新实例中使用此实例变量。我所有的dao类都继承自这个基本dao

但是,也有一些间歇性错误,如:

org.springframework.jdbc.support.MetaDataAccessException:提取数据库元数据时出错。。。。 . . . 原因: org.apache.tomcat.dbcp.dbcp.PoolingDataSource.checkConnection(): 连接已关闭。
我看不出这个错误的模式。对于每个数据源,我的初始大小为10,maxActive为100。关于这里可能出现的问题有什么建议吗?

谢谢你的回答。通过每次创建一个新的jdbctemplate实例,我克服了这些错误。我还更新了最新的mysql jconnector jsr(5.1.14) 现在的类设计非常简单。我有一个基本dao,它使用一个自定义编写的SpringJDBC包装器的新实例,该包装器将jdbcTemplate对象实例化为实例变量。对于每个请求,在SimpleJDBCall的新实例中使用此实例变量。我所有的dao类都继承自这个基本dao

但是,也有一些间歇性错误,如:

org.springframework.jdbc.support.MetaDataAccessException:提取数据库元数据时出错。。。。 . . . 原因: org.apache.tomcat.dbcp.dbcp.PoolingDataSource.checkConnection(): 连接已关闭。
我看不出这个错误的模式。对于每个数据源,我的初始大小为10,maxActive为100。关于这里可能出现的问题有什么提示吗?

Spring在动态切换数据源方面有一定程度的本机支持。你是怎么做到的

下面也能帮上忙


  • Spring对动态切换数据源有一定程度的本机支持。你是怎么做到的

    下面也能帮上忙


  • 如果在更改数据源时不提供数据访问操作的同步,这是非常不安全的线程。如果在更改数据源时不提供数据访问操作的同步,这是非常不安全的线程。