Atomikos、Java 8和多个数据库

Atomikos、Java 8和多个数据库,java,database,atomikos,Java,Database,Atomikos,我们有一个应用程序,它已经在Java7中运行了好几年,但是在升级到Java8时遇到了问题。数据库连接似乎是问题所在 情况就是这样: 该应用程序可以访问200多个数据库。或者,从技术上讲,一个数据库安装上有200个不同的模式。我们使用Atomikos作为数据源。使用Java7启动应用程序时,可能会对数据源进行一些顺序迭代,因为我们已将最大池大小设置为5。这需要一点时间,但实际上没有问题 当我们尝试使用Java8运行时,我猜想它会尝试并行地完成所有工作。应用程序在启动时崩溃,如下所示: 05:21:

我们有一个应用程序,它已经在Java7中运行了好几年,但是在升级到Java8时遇到了问题。数据库连接似乎是问题所在

情况就是这样: 该应用程序可以访问200多个数据库。或者,从技术上讲,一个数据库安装上有200个不同的模式。我们使用Atomikos作为数据源。使用Java7启动应用程序时,可能会对数据源进行一些顺序迭代,因为我们已将最大池大小设置为5。这需要一点时间,但实际上没有问题

当我们尝试使用Java8运行时,我猜想它会尝试并行地完成所有工作。应用程序在启动时崩溃,如下所示:

05:21:39.611信息[主要] o、 s.o.j.LocalContainerEntityManagerFactoryBean-构建JPA 持久化单元“database.np”的容器EntityManagerFactory 05:21:41.389信息[主要] o、 s.o.j.LocalContainerEntityManagerFactoryBean-构建JPA 持久化单元的容器EntityManagerFactory 'database.np_000000000_0000'05:21:41.796 INFO[main] o、 s.o.j.LocalContainerEntityManagerFactoryBean-构建JPA 持久化单元的容器EntityManagerFactory 'database.np_000000001_0000'05:22:11.890警告[main] c、 atomikos.jdbc.AtomikosSQLException-连接池已耗尽-重试 增加服务器上的“maxPoolSize”和/或“borrowConnectionTimeout” 数据源bean。05:22:41.991警告[主] c、 atomikos.jdbc.AtomikosSQLException-连接池已耗尽-重试 增加服务器上的“maxPoolSize”和/或“borrowConnectionTimeout” 数据源bean。05:22:41.998错误[main] o、 h.tool.hbm2ddl.SchemaValidator-HH000319:无法获取数据库 元数据com.atomikos.jdbc.atomikossqleexception:连接池 耗尽-尝试增加“maxPoolSize”和/或 DataSourceBean上的“borrowConnectionTimeout”。 位于com.atomikos.jdbc.AtomikosSQLException.throwatomikosqlexception(AtomikosSQLException.java:46) ~[transactions-jdbc-3.9.3.jar:na] 位于com.atomikos.jdbc.AbstractDataSourceBean.ThrowatomikosqlException(AbstractDataSourceBean.java:90) ~[transactions-jdbc-3.9.3.jar:na] 位于com.atomikos.jdbc.AbstractDataSourceBean.ThrowatomikosqlException(AbstractDataSourceBean.java:85) ~[transactions-jdbc-3.9.3.jar:na]

因此,我们尝试stacktrace中的建议,并将maxPoolSize增加到 200以上为宜。然后我们可以启动应用程序, 但是这似乎是一种完全的过激行为,更糟的是, 应用程序不喜欢有这么多的连接,它不喜欢 真正使用-仅偶尔访问数据库/模式。我们 请参阅日志中的以下内容:

11:08:26.970[Atomikos:0]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceNp”:连接空闲358671ms 11:08:26.970[Atomikos:0]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceNp”:连接空闲357953ms 11:08:26.970[Atomikos:0]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceNp”:连接空闲357947ms 11:08:26.970[Atomikos:0]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceNp”:连接空闲26425ms 11:08:26.970[Atomikos:0]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceNp”:当前大小:1/4 11:08:29.983[Atomikos:1]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceRolp”:尝试收缩池 11:08:29.984[Atomikos:1]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceRolp”:的连接空闲 359790ms |(重复200次…| atomikos连接池 “dataSourceRolp”:连接空闲时间为263450ms 11:07:29.983 [Atomikos:1]调试c.a.datasource.pool.ConnectionPool-Atomikos 连接池'dataSourceRolp':连接空闲263446ms 11:07:29.983[Atomikos:1]调试c.a.datasource.pool.ConnectionPool- atomikos连接池“dataSourceRolp”:的连接空闲 263168ms 11:07:29.983[Atomikos:1]调试 c、 a.datasource.pool.ConnectionPool-atomikos连接池 “数据源OLP”:当前大小:1/208


有什么想法吗?出于法律原因,我们需要将200多个模式分开。除此之外,我们还可以根据需要自由选择技术解决方案。

您使用的是什么数据库?在数据库迁移期间(从Oracle到PostgreSQL),我遇到了一个非常类似的问题

我们将数据源定义为JNDI,为了创建数据源,我们还从jdbc拦截器中删除了一些属性


如果您使用的是PostgreSQL,请检查您为数据源定义的bean类型。

您使用的是什么数据库?在数据库迁移期间(从Oracle到PostgreSQL),我遇到了一个非常类似的问题

我们将数据源定义为JNDI,为了创建数据源,我们还从jdbc拦截器中删除了一些属性


如果您使用的是PostgreSQL,请检查您为数据源定义的bean类型。

谢谢您的输入。我们来看看JDBC拦截器。数据库是MariaDB,基本上是MySQL的一个不同版本。感谢您的输入。我们来看看JDBC拦截器。数据库是MariaDB,基本上是MySQL的不同版本。