⽹站后台数据库被⼿动修改后前端页⾯不更新的问题解决
问题描述:⽹站前端⽤vue,后端⽤java mvc+tomcat服务器,数据库access。由于数据库为共享⽂件,可能被通过前端⽹页修改,也可能被⼿动修改,还可能被windows应⽤程序修改。通过前端⽹页修改时,页⾯可以正常显⽰修改后的内容。⽽如果页⾯查询⼀次数据后,再通过⼿动或其他windows程序修改数据库时,前端页⾯不会显⽰修改后的数据。
问题分析:经⽹上查询⼤量资料,有⼈说是页⾯缓存问题,但通过清除缓存、关闭页⾯、更换浏览器等⽅法都⽆法解决该问题,甚⾄更换另⼀台电脑打开⽹页也⽆法显⽰修改后的数据。甚⾄有⼈说该问题⽆法解决,只能通过重启tomcat服务器才⾏。重启服务器后,的确可以显⽰修改后的数据,但是作为服务器,怎么可以随便重启,数据随时都有可能被其他⼈⽤windows程序修改,服务器管理⼈员也不知道何时有⼈修改了数据啊。最后查到⼀位⼤虾说是服务器的缓存问题,分析得头头是道,然⽽却没有给出如何解决的⽅法。
问题的解决:通过上述⼤量资料查询,确定是服务器的缓存问题,不是⽹页缓存的问题,那么如何解决呢?我是通过将java mvc更改成spring boot框架来解决的,因为spring boot框架能⾮常⽅便快捷地进⾏服务器缓存管理,具体⽅法如下:
1、在l中添加ecache依赖,如下:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2、在resource⽂件夹下新建⼀个l⽂件,写下如下代码(注意缩进):
spring:
cache:
type: ehcache
ehcache:
config: classpath:/l
3、在resources⽬录下新建l,写下如下代码(⾥⾯的注释已说明了各个代码代表的意义),其中myCache是缓存的名称,需要在后续的controller中⽤上:
<ehcache>
<!--
磁盘存储:将缓存中暂时不使⽤的对象,转移到硬盘,类似于Windows系统的虚拟内存
path:指定在硬盘上存储对象的路径
path可以配置的⽬录有:
user.home(⽤户的家⽬录)
user.dir(⽤户当前的⼯作⽬录)
pdir(默认的临时⽬录)
ehcache.disk.store.dir(ehcache的配置⽬录)
绝对路径(如:d:\\ehcache)
查看路径⽅法:String tmpDir = Property("pdir");
-->
<diskStore path="pdir" />
<!--
defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
eternal:代表对象是否永不过期 (指定true则下⾯两项配置需为0⽆限期)
timeToIdleSeconds:最⼤的发呆时间 /秒
timeToLiveSeconds:最⼤的存活时间 /秒
overflowToDisk:是否允许对象被写⼊到磁盘
说明:下列配置⾃缓存建⽴起120秒(2分钟)有效。
在有效的120秒(2分钟)内,如果连续60秒(1分钟)未访问缓存,则缓存失效。
就算有访问,也只会存活120秒。
-->
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="600" timeToLiveSeconds="600" overflowToDisk="true" />
<cache name="myCache" maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="60" timeToLiveSeconds="120" overflowToDisk="true" />
</ehcache>
4、在controller中使⽤缓存,以下是⽰例代码:
@Controller
public class Staff {
@Autowired StaffDao dao;
@Cacheable(value="myCache")
@RequestMapping(value = {"/AllStaff","/allstaff"})
@ResponseBody
public List&ity.Staff> findAll() {
List&ity.Staff> staff=null;spring framework是什么系统
try {
AllStaff(); } catch (Exception e) {
e.printStackTrace(); }
dao.closeConnection();
return staff;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论