我正在使用 java 更新 Spring 应用程序中的 DAO bean。当DAO被初始化时,初始化方法(InitDao)访问一个Oracle数据库并从一个表中返回4行数据。该类缓存数据,当应用程序在消息处理期间需要数据时,它会使用缓存的数据,除非上次访问时间超过 15 分钟之前。当我第一次运行应用程序时,数据已正确返回。我更新了数据库中的数据,应用程序从不使用新数据。如果我用新版本重新部署应用程序,即使在初始化期间,数据也是原始数据。缓存永远不会更新。缓存时间设置并在 15 分钟后更新。查询数据库的方法也会运行。然而数据并没有改变。
我是这个框架的新手,所以我不完全确定 bean 是如何初始化的以及该过程是如何工作的。但这就是我所知道的。
我以这种方式更新了定义 bean 的 xml 文件:
<bean id="applicationControlDao"
class="tms.common.repository.appControl.cache.dao.ApplicationControlDao">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="applications">
<value>TRIPMESSAGINGSERVICE</value>
</property>
</bean>
这是初始化方法。
public void initDao() throws Exception {
this.selectApplicationControlQuery = new ApplicationControlDao.SelectApplicationControlQuery(this.getDataSource(), "select application, appl_parm_key, parameter from tms_application_control where application = ?");
this.applicationControlDtos = this.querySelectApplicationControl(this.selectApplicationControlQuery, this.applications);
this.resetExpiration();
this.lastCacheRefreshTime = GregorianCalendar.getInstance();
}
这是在应用程序中更新缓存的方式:
public boolean isParameterFlagYes(String parameterKey) {
String[] application = {MessageServiceConstants.APPLICATION_NAME};
log.info("Last refresh time: " + applicationControlDao.getLastRefreshTime());
List<IApplicationControlDTO> applicationControlDtoList = applicationControlDao.selectApplicationControl(application);
for(IApplicationControlDTO appControls : applicationControlDtoList)
{
log.info("App Control Parameter Key: " + appControls.getParamKey() + " Parameter Value: " + appControls.getParameter());
}
Optional<IApplicationControlDTO> applicationControlDto = applicationControlDtoList.stream().
filter(p -> p.getParamKey().equals(parameterKey) &&
p.getParameter().equalsIgnoreCase(CoreConstants.YES_FLAG)).findAny();
if (applicationControlDto.isPresent()) {
log.info("App Control Flag is true for " + parameterKey );
return true;
}
log.info("App Control Flag is false for " + parameterKey );
return false;
}
为什么不清除缓存并更新数据?我还尝试调用作为 ApplicationControlDAO 一部分的“resetCache”方法,并且数据库值不会更改。它们是我第一次运行应用程序时的原始值。
谢谢