我在Amazon Web Services EC2上托管的Tomcat上运行JNDI JDBC连接池,与Amazon Web Services PostgreSQL关系数据库通信。
我有一个包含40,000行数据的表,我试图使用JDBC PreparedStatement“SELECT * FROM tableName”一次性收集这些数据。
当我在本地计算机上运行servlet(来自我的本地Tomcat)并通过 db-name.aws-rds-URL与RDS通信时,这些组合可以完美地运行,收集所有40,000行:5432但是,当我在AWS EC2上运行相同的servlet并指示它在本地vLAN上与RDS通信时,它永远不会超过30,000行,resultSets只有2,000行。每次刷新它时,它都会产生一个新的,不同但不完整的行数。
下面是我在Tomcat的全局context.xml中的条目(我在多个servlet中使用相同的dataSource)。
< Resource
name="jdbc/postgres4"
auth="Container"
type="javax.sql.DataSource"
maxActive="8"
maxIdle="8"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://dn-name.aws-rds-URL:5432/SID"
username="db-username"
password="password" />
关于什么可能会误入歧途的任何想法?
答案 0 :(得分:0)
这根本不是数据库问题...我在while(rs.next())循环中添加了一个计数器,每次最终得到40,000,而servlet行nums也像以前一样变化。
我设法通过从Google Guava MapMaker()ConcurrentMap切换到Java ConcurrentHashMap来解决问题,除了现在我必须再次处理Java HashMap GC内存问题...