网站后台数据库被手动修改后前端页面不更新的问题解决

2021/4/9 2:27:05

本文主要是介绍网站后台数据库被手动修改后前端页面不更新的问题解决,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题描述:网站前端用vue,后端用java mvc+tomcat服务器,数据库access。由于数据库为共享文件,可能被通过前端网页修改,也可能被手动修改,还可能被windows应用程序修改。通过前端网页修改时,页面可以正常显示修改后的内容。而如果页面查询一次数据后,再通过手动或其他windows程序修改数据库时,前端页面不会显示修改后的数据。

问题分析:经网上查询大量资料,有人说是页面缓存问题,但通过清除缓存、关闭页面、更换浏览器等方法都无法解决该问题,甚至更换另一台电脑打开网页也无法显示修改后的数据。甚至有人说该问题无法解决,只能通过重启tomcat服务器才行。重启服务器后,的确可以显示修改后的数据,但是作为服务器,怎么可以随便重启,数据随时都有可能被其他人用windows程序修改,服务器管理人员也不知道何时有人修改了数据啊。最后查到一位大虾说是服务器的缓存问题,分析得头头是道,然而却没有给出如何解决的方法。

问题的解决:通过上述大量资料查询,确定是服务器的缓存问题,不是网页缓存的问题,那么如何解决呢?我是通过将java mvc更改成spring boot框架来解决的,因为spring boot框架能非常方便快捷地进行服务器缓存管理,具体方法如下:

1、在pom.xml中添加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文件夹下新建一个application.yml文件,写下如下代码(注意缩进):

spring:
  cache:
    type: ehcache
    ehcache:
      config: classpath:/ehcache.xml

3、在resources目录下新建ehcache.xml,写下如下代码(里面的注释已说明了各个代码代表的意义),其中myCache是缓存的名称,需要在后续的controller中用上:

<ehcache>
    <!--
        磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
        path:指定在硬盘上存储对象的路径
        path可以配置的目录有:
            user.home(用户的家目录)
            user.dir(用户当前的工作目录)
            java.io.tmpdir(默认的临时目录)
            ehcache.disk.store.dir(ehcache的配置目录)
            绝对路径(如:d:\\ehcache)
        查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
     -->
    <diskStore path="java.io.tmpdir" />
    <!--
        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<com.entity.Staff> findAll() {                
        List<com.entity.Staff> staff=null;
        try {
            staff=dao.getAllStaff();
        } catch (Exception e) {
            e.printStackTrace();
        }
        dao.closeConnection();
        return staff;
    }
}

 



这篇关于网站后台数据库被手动修改后前端页面不更新的问题解决的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程