如果这看起来很琐碎,我深表歉意,但是我似乎找不到任何解决该问题的方法。我在Tomcat服务器上有一个Java webapp,该服务器在webapp上下文(JNDI)中配置了Oracle Database 12c。没有使用任何特殊的框架(例如Spring),仅使用java.sql和javax.sql程序包中的所有内容。
在Web应用程序中,如果在索引的列中更改了数据,则重新运行查询时,更改将显示在Web应用程序中。如果对未索引的列进行了更改,则不会显示更改(但是,如果直接检查表或回收Tomcat并进行检查,则数据会更改)。这些查询只是简单的更新查询,没有什么复杂的。
我认为这与Tomcat共享会话的方式有关,如果您回收Tomcat服务器(停止/启动),则会显示更改。
这是上下文配置(仅是资源部分):
<resource
name="jdbc/database"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@database.address.com:1521:sid"
username="user"
password="pass"
maxActive="100"
maxIdle="10"
minIdle="3"
testWhileIdle="true"
validationQuery="select 1 from dual"
validationInterval="34000"
timeBetweenEvictionRunsMillis="34000"
numTestsPerEvictionRun="10"
minEvictableIdleTimeMillis="50000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
testOnBorrow="true"
/>
我已经读过有关语句缓存的信息,但是我不确定语句缓存是否会成为问题,只是结果似乎已缓存,并且不会在正在重新运行的查询中更新(除非语句缓存存储了此信息,我以为它们只是查询本身,而不是结果集。无论如何,是否有强迫数据库连接不对Oracle使用旧结果的方法?
感谢您的帮助。