我们有一个应用程序已经在Java 7上运行了几年,但是升级到Java 8有问题。数据库连接似乎是问题所在。
情况就是这样:应用程序访问200多个数据库。或者,在技术上,一个数据库安装上有200个不同的模式。我们使用Atomikos作为数据源。使用Java 7启动应用程序时,可能会对数据源进行顺序迭代,因为我们已经将最大池大小设置为5,这需要一些时间,但实际上没有问题。
当我们尝试使用Java 8运行时,我的猜测是它试图并行地完成所有事情。应用程序在启动时崩溃,如下所示:
05:21:39.611 INFO主o.s.o.j.LocalContainerEntityManagerFactoryBean -为持久化单元构建JPA容器EntityManagerFactory 'database.np‘05:21:41.389 INFO主o.s.o.j.LocalContainerEntityManagerFactoryBean -构建用于持久性单元的JPA容器EntityManagerFactory’database.np_000000000_0000:21:41.796 INFO主o.s.o.j.LocalContainerEntityManagerFactoryBean -为持久化单元构建JPA容器EntityManagerFactory 'database.np_000000001_0000‘05:22:11.890c.atomikos.jdbc.AtomikosSQLException -连接池耗尽-尝试在DataSourceBean上增加'maxPoolSize‘和/或'borrowConnectionTimeout’。05:22:41.991警告主c.atomikos.jdbc.AtomikosSQLException -连接池耗尽-尝试在DataSourceBean上增加'maxPoolSize‘和/或'borrowConnectionTimeout’。05:22:41.998错误主o.h.tool.hbm2ddl.SchemaValidator - HHH000319:无法获得数据库元数据com.atomikos.jdbc.AtomikosSQLException:连接池耗尽-尝试在DataSourceBean上增加'maxPoolSize‘和/或'borrowConnectionTimeout’。在com.atomikos.jdbc.AtomikosSQLException.throwAtomikosSQLException(AtomikosSQLException.java:46) ~事务-jdbc-3.9.3.jar:na在com.atomikos.jdbc.AbstractDataSourceBean.throwAtomikosSQLException(AbstractDataSourceBean.java:90) ~事务-jdbc-3.9.3.jar:na在com.atomikos.jdbc.AbstractDataSourceBean.throwAtomikosSQLException(AbstractDataSourceBean.java:85) ~事务-jdbc-3.9.3.jar:na 因此,我们尝试在堆栈跟踪中提出建议,并将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 -原子库连接池'dataSourceNp':连接空闲为357953ms 11:08:26.970 Atomikos:0调试c.a.datasource.pool.ConnectionPool '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 -原子库连接池'dataSourceNp':当前大小: 1/4 11:08:29.983 Atomikos:1 DEBUG c.a.datasource.pool.ConnectionPool -原子库连接池'dataSourceRolp':尝试收缩池11:08:29.984 atomikos :调试c.a.datasource.pool.ConnectionPool -原子源连接池'dataSourceRolp':空闲连接359790ms\x{e76f}\x{e76f}(重复200次)\x{e76f}\x{e76f} 'dataSourceRolp':263450ms 11:07:29.983 atomikos连接池'dataSourceRolp':一个调试空闲连接池'dataSourceRolp':连接空闲为263446ms 11:29.983:29.983 atomikos连接池'dataSourceRolp':为263168ms连接空闲连接:07:29.983 c.a.datasource.pool.ConnectionPool :1调试c.a.datasource.pool.ConnectionPool -原子源pool连接池:当前大小: 1/208
有什么想法吗?出于法律原因,我们需要将200+模式分开。除此之外,我们可以自由选择我们想要的技术解决方案。
发布于 2017-08-10 19:22:25
你用的是什么数据库?在数据库迁移过程中(从Oracle迁移到PostgreSQL),我遇到了一个类似的问题。
我们将数据源定义为JNDI,为了使数据源,我们还从jdbc拦截器中删除了一些属性。
如果您正在使用PostgreSQL,也请检查您为数据源定义的bean类型。
https://stackoverflow.com/questions/38514291
复制相似问题