java - Spring Framework bean 初始化未从数据库返回正确的数据
问题描述
我正在使用 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”方法,并且数据库值不会更改。它们是我第一次运行应用程序时的原始值。
谢谢
解决方案
推荐阅读
- python - 关于跨多个模型和字段搜索 Django 查询集的问题
- android - MutableLiveData 未在 UI 中更新
- python - 我可以在没有系统管理员的情况下修复“未找到版本 GLIBC_2.14”错误吗?
- php - 在 PHP 中 ping ipv6
- python - 使用哪个分隔符将字符串解包为单个字符
- ansible - Ansible 创建虚拟机
- c# - C# 在选择查询中使用函数来解密表数据
- store - 如何在 MxLinux 上修复 snapd.socket no such file or directory 错误?
- c++ - Visual Studio中静态库项目之间未解决的外部问题
- javascript - 在 Javascript 中不使用“.reverse”方法的情况下反转函数中的数字