网站运维之JAVA-SSH框架数据同步问题

news/2024/5/10 20:44:49/文章来源:https://blog.csdn.net/weixin_34232363/article/details/85918586

一、环境

SSH环境,查询用的是基于Hibernate的配置文件构建了一个SessionFactory,主要代码如下

public class HibernateUtil {private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();private static Configuration configuration = null;public static SessionFactory sessionFactory;static {try {configuration = new Configuration().configure("/hibernate.cfg.xml");sessionFactory = configuration.buildSessionFactory();} catch (HibernateException e) {System.out.println("解析xml和创建Session工厂error");e.printStackTrace();}}public static Session getSession() {Session session = threadLocal.get();if (session == null) {session = sessionFactory.openSession();threadLocal.set(session);}//Session session=sessionFactory.getCurrentSession();return session;}// ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步public static final ThreadLocal<Session> session= new ThreadLocal<Session>();//创建Sessionpublic static Session currentSession()throws HibernateException{//通过线程对象.get()方法安全创建SessionSession s = session.get();// 如果该线程还没有Session,则创建一个新的Sessionif (s == null){s = sessionFactory.openSession();// 将获得的Session变量存储在ThreadLocal变量session里
                session.set(s);}return s;}//关闭Sessionpublic static void closeSession()throws HibernateException{Session s = session.get();if (s != null)s.close();session.set(null);}}
View Code

二、问题

之后在具体业务中对该工具类引用,代码如下

	public Map<String, List<UserTempDto>> packetStatistics(Map<String, String> params) {System.out.println("99999999999999999999999999");Map<String, List<UserTempDto>> map = new HashMap<String, List<UserTempDto>>();List<UserTempDto> userTypeList = new ArrayList<UserTempDto>();List<UserTempDto> provinceList = new ArrayList<UserTempDto>();String serachCondition = serachCondition(params);serachCondition=StringUtils.isBlank(serachCondition)? "":serachCondition;//��ȡsessionSession session=HibernateUtil.getSession();//����ʡ�ݷ���hqlString groupByProvince = " group by province";String hqlCountProvince = "select province,COUNT(user_code) FROM StatUserinfo where 1=1 ";Query  countProvince = session.createQuery(hqlCountProvince+serachCondition+groupByProvince); @SuppressWarnings({ "unchecked", "unused" })List<Object[]> countProvinceList=(List<Object[]>)countProvince.list();//����רί�����hqlString groupByUserType = " group by userType";String hqlCountUserType = "select userType,COUNT(user_code)  FROM StatUserinfo where 1=1 ";Query  countUserType = session.createQuery(hqlCountUserType+serachCondition+groupByUserType); List<Object[]> countUserTypeList=(List<Object[]>)countUserType.list();HibernateUtil.closeSession();UserTempDto userTempDto;try {for (Object[] objects : countUserTypeList) {//����רί�����ͳ��String userType=(String) objects[0]==null? "未知":(String)objects[0];Long cUserType=(Long) objects[1];userTempDto=new UserTempDto();userTempDto.setCountUserType(cUserType);userTempDto.setUserType(userType);userTypeList.add(userTempDto);}for (Object[] objects : countProvinceList) {//����רί�����ͳ��String province=(String) objects[0]==null? "未知":(String)objects[0];Long cProvince=(Long) objects[1];userTempDto=new UserTempDto();userTempDto.setProvince(province);userTempDto.setCountProvince(cProvince);provinceList.add(userTempDto);System.out.println("省份:"+province+"&人数:"+cProvince);}} catch (Exception e) {e.printStackTrace();}map.put("userTypeList", userTypeList);map.put("provinceList", provinceList);return map;}

 但是 每次tomcat启动后 第一次查询是正确的 ,然后做修改操作,第二次查询就不正确了,查询不到修改后的数据,必须重启tomcat,才可以查询到和数据库最新数据一样的数据

三、解决办法

想到了缓存,但是项目中hibernate.cfg.xml根本没有使用缓存,因为没有相关的配置。也更改了Session的获取类型,比如

session = sessionFactory.openSession();

替换为

Session session=sessionFactory.getCurrentSession();

都没有起到什么作用

关键的来了!

 Session session=HibernateUtil.getSession();
        //by wxj
        Transaction tx=session.beginTransaction();
      //����ʡ�ݷ���hql
        String groupByProvince = " group by province";
        String hqlCountProvince = "select province,COUNT(user_code) FROM StatUserinfo where 1=1 ";
        Query  countProvince = session.createQuery(hqlCountProvince+serachCondition+groupByProvince);
        @SuppressWarnings({ "unchecked", "unused" })
        List<Object[]> countProvinceList=(List<Object[]>)countProvince.list();
        //����רί�����hql
        String groupByUserType = " group by userType";
        String hqlCountUserType = "select userType,COUNT(user_code)  FROM StatUserinfo where 1=1 ";
        Query  countUserType = session.createQuery(hqlCountUserType+serachCondition+groupByUserType);
        List<Object[]> countUserTypeList=(List<Object[]>)countUserType.list();
        //by wxj
        tx.commit();

  在查询之前,还有查询结束之后分别增加了 开始事务和提交事务的操作,数据奇迹的发生了变化,tomcat启动后,查询数据台湾省有1个用户,接着修改一个用户的归属为台湾省

  此时数据库中有两个用户是台湾省了,再次查询数据,台湾省的用户为2,即修改操作和查询操作数据同步了

需要注意的是 事务是hibernate的事务

import org.hibernate.Transaction;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_848082.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件架构设计学习总结(12):大型网站技术架构(六)网站的伸缩性架构

网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的伸缩性设计可以分成两类&#xff0c;一类是根据功能进行物…

ASP.NET Core 网站发布到Linux服务器

长期以来&#xff0c;使用.NET开发的应用只能运行在Windows平台上面&#xff0c;而目前国内蓬勃发展的互联网公司由于成本的考虑&#xff0c;大量使用免费的Linux平台&#xff0c;这就使得.NET空有一身绝技但无法得到广大的施展空间&#xff0c;.NET平台被认为只适合开发企业内…

《流量的秘密: Google Analytics网站分析与优化技巧(第3版)》一2.3 了解网站分析数据的准确性...

本节书摘来自异步社区《流量的秘密: Google Analytics网站分析与优化技巧(第3版)》一书中的第2章&#xff0c;第2.3节&#xff0c;作者【英】Brian Clifton&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 了解网站分析数据的准确性 流量的秘密: Google A…

优质免费在线学习网站

文章翻译 by / 林本托 Tips 作者&#xff1a;Steven Ryan 原文地址&#xff1a;Build your career with free online courses 现在网上已经有很多非常优质的在线学习网站&#xff0c;更让我们感到开心和幸运的是&#xff0c;很多网站竟然是免费的&#xff0c;所以放着这么多好的…

网站安装打包 新建网站[四][文件解压] 上

在新建网站之前&#xff0c;就是要把打包好的项目拷贝一份到IIS指定的路径上&#xff0c;同时&#xff0c;还要为个别目录设置相应的访问权限! 于是就产生了两件事&#xff1a; 1。拷贝-》[这里我是采用RAR打包&#xff0c;然后解压] 2。设置权限 如果是用拷贝方式&#xff0c;…

云服务器 ECS 建站教程:部署Java Web

部署Java Web项目Tomcat 作为一个开源且免费的 Java Web 服务器&#xff0c;常用来作为 web 开发的工具。它可以托管由 servlet&#xff0c;JSP 页面&#xff08;动态内容&#xff09;&#xff0c;HTML 页面&#xff0c;js&#xff0c;样式表&#xff0c;图片&#xff08;静态内…

Python版——博客网站七 部署Web App项目

2019独角兽企业重金招聘Python工程师标准>>> 开源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 一、何为 DevOps DevOps&#xff08;英文Development和Operations的组合&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&a…

【第二期】如何制作属于自己网站的音乐播放器 - 该换了

大家好&#xff0c;欢迎喜欢我的朋友继续关注我的技术文章&#xff0c;话说现在的东西越来越快了&#xff0c;更新的不是你所想象的到的。 接着上次的讲&#xff0c;对于企业的建站&#xff0c;现在大多数都是使用公司中成熟的类库构架网站的速度不是你能想象的&#xff0c;就拿…

linux网站dos攻击自动封15分钟,简单的shell脚本结合awk实现防止对web服务的dos攻击...

一 实验环境鄙人使用的是centos 6.8操作系统 需要安装iptables(常见的linux系统貌似都会自动安装iptables)这条可以忽略 awk也需要安装没有的话就用yum装下吧当然最重要的是web服务 我这里使用的是apache 对日志进行分析 当然你也可以分析其他的日志嘛 只是拿web服务来当…

解决网站快照内容被篡改跳转被挂马的问题

首先请各位网站运营者&#xff0c;检查下网站从百度点击进去&#xff0c;是否跳转到了恶意网站上了&#xff0c;直接输入网址则不会跳转的这个情况。再一个查看网站在百度里的首页快照是否是自身网站的内容&#xff0c;如果出现一些跟网站不相关的内容。 比如&#xff1a;恶意内…

【网站制作设计】建议这三个基本要求你一定要掌握!

做什么事情都要有一定的基本尺度来衡量自己&#xff0c;当然&#xff0c;在网站制作设计过程中&#xff0c;我们应该需要衡量网站制作基本标准&#xff0c;那网站建设到底应该符合什么样的标准呢?又有哪些掌握哪些可以使网站制作得更为完善呢?下面&#xff0c;我们重点一起来…

为在Windows Azure上的网站配置自定义域名

本篇体验给Windows Azure上的网站自定义域名&#xff0c;首先"CNAME"和"A记录"是必须了解的概念。 假设&#xff0c;在Windows Azure上的网站域名是&#xff1a;x.chinacloudsites.cn CNAME 通过CNAME&#xff0c;可以把诸如mywebiste.com, www.mywebsite.…

笔记篇-一些很牛×的网站

1.东方博宜 一个适合新手的C练习&#xff08;做题&#xff09;网站。 2.MC皮肤网站 这里为MC&#xff08;Minecraft&#xff09;玩家提供了许多皮肤。 3.Jetbrains 这里有比较常见的编程软件&#xff1a;Pycharm、IDEA、Rubymine。。。 4.清华大学镜像站 这里有linux系统的…

笔记篇-制作自己的个人网站(使用GithubPages)

本章将介绍如何创建自己的个人网站&#xff0c;并且确保你有一个Github账号。 1.创建网站 来到你的github个人主页&#xff0c;选择Repositories存储库。 选择New&#xff0c;新建一个存储库。 命名格式为&#xff1a;你的用户名.github.io。别的选项都保持默认&#xff0c;最…

nginx替换网站响应内容(ngx_http_sub_module)

为什么80%的码农都做不了架构师&#xff1f;>>> ngx_http_sub_module模块是一个过滤器&#xff0c;它修改网站响应内容中的字符串&#xff0c;比如你想把响应内容中的‘ttlsa’全部替换成‘运维生存时间’&#xff0c;这个模块已经内置在nginx中&#xff0c;但是默…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

4个资源多到溢出来的在线网站,个个都是“上好佳”

现在人们对资源的需求很多&#xff0c;不管是图片资源还是电影、音乐、资源等。有需要就有对应的资源网站&#xff0c;如果你还没有好用的在线网站&#xff0c;可以看看下面的这些哦。一、图片——thestocks写文章总是找不到好看的、无版权的图片可用&#xff1f;这个网站已经帮…

IIS日志-网站运维的好帮手

对于一个需要长期维护的网站来说&#xff0c;如何让网站长久稳定运行是件很有意义的事情。 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了&#xff0c;这也是很正常的。 还有些时候&#xff0c;我们希望不断地优化网站&#xff0c;让网站更快速的响应用户请求&#…

《高扩展性网站的50条原则》

《高扩展性网站的50条原则》 基本信息 原书名&#xff1a;Scalability Rules: 50 Principles for Scaling Web Sites 作者&#xff1a; (美)Martin L.Abbott Michael T.Fisher [作译者介绍] 译者&#xff1a; 张欣 杨海玲 丛书名&#xff1a; 图灵程序设计丛书 出版社&#xff…

c++封装HTTP GET请求访问网站

运行环境&#xff1a;VS2013 功能&#xff1a;模拟浏览器访问百度 具体代码如下 #include <iostream> #include <WinSock2.h> #include <WS2tcpip.h> #include <sstream>#pragma comment(lib,"ws2_32.lib")int main() {//初始化配置WORD …