记录一次因now()函数应用周期性查不到数据的问题

2023-11-11

问题原因:

        查询sql使用了now()函数,测试环境数据库所在的容器日期不对,与实际时间晚8个小时。

问题背景描述:

        某天下午快要下班的时候,大概五点的样子,某个测试小哥在系统里点击用户注册功能注册后,一切数据都正常生成后,登录新注册的用户,发现这个用户的菜单都没查询到,然后反馈到,说这功能用户没菜单啊。然后对应的开发小哥说明儿再给看,结果到明天看的时候,这用户的菜单又查到了。然后开发小哥让他再观察观察,毕竟开发小哥本地开发环境是没有这个问题的。知道这个问题再次出现,引起了需求验收的注意,然后开发小哥静下心来一顿分析。

 分析过程:

        对查询菜单的代码逻辑进行一顿分析后,尝试了清理浏览器缓存、内存中间件缓存,问题依然出现。只能尝试对第三方jar进行反编译查看加日志了,对比本地开发环境与测试环境的日志,也没发现太多的不一样,直到恰巧不巧的时候,开发小哥在点击第三方系统的一个某个功能时,发现新注册的用户所属单位直接显示不出来了,这一现象引起了他的注意,然后尝试跟踪这个查询单位的接口逻辑,结果发现这个查询单位的sql里有用到一个过滤条件 A.client_id = '1004' and A.start_time <= now(), 拿着该sql在本地开发环境数据库能够查询出数据,但是拿到测试环境的数据库查询却查询不到数据,两个库里的数据是一致的前提。就在测试环境数据尝试去掉一些and条件,结果发现去掉A.startTime <= now()这个后,就能查询出来。这个时候看了A.start_time字段值是正常的,就开始怀疑now()了。就在两个环境的数据库分别执行select now() from dual;结果开发环境的查询值正常,测试环境的查询值比当前时间时间晚8个小时。以此断定数据库的时间配置是有问题的。然后走查查询菜单的代码逻辑,发现里面也存在查询单位按照A.startTime <= now()过滤的逻辑。以此更加确定,查询不出来就是这个时间导致的了。

 改动调整:

        开发小哥根据自己的分析结论,找测试小哥查看数据库服务器时间,然后测试小哥反馈服务器时间没问题啊,服务器命令查询也是正常的啊。然后让测试小哥直接在数据库里查询now(),结果他也觉得时间不对,就找运维小哥看了看,结果运维小哥反馈,这个数据库是docker镜像方式启动的,时间取决于容器,就查看容器时间,容器时间就是晚8个小时的,然后校正了容器时间,重启了数据库,让测试小哥直接在数据库里查询now()这次时间是对的了,就重启了测试环境的系统,再次登录新注册的用户,菜单就可以查询到了。这也刚好对上了,为啥下午五点查不出来,第二天早上一来就查出来了,第二天早上相隔都超过8个小时了,自然A.startTime <= now()满足了。

总结:

        在写sql时,还是尽量避开使用数据库特有的函数,数据库适配时兼容性不是很好一方面,也藏着一些暗坑,某些场景也影响性能。然后关于服务器时间这个,在应用所关联到的服务器尽量保证时间是同步的,这样可以避免一些奇怪的问题。然后就是关于一些奇怪的问题,大胆猜测勇于有目的性尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录一次因now()函数应用周期性查不到数据的问题 的相关文章

  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 锤子剪刀布游戏

    问题描述 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入 输入第1行给出正整数N lt 105 即双方交锋的次数 随后N行
  • RC4文件加密的Python实现方法

    RC4 Rivest Cipher 4 是一种流密码 stream cipher 算法 广泛应用于网络通信和数据加密中 本文将介绍如何使用Python实现RC4文件加密算法 RC4算法的核心是使用一个伪随机数生成器 PRNG 生成密钥流 然
  • 端口显示被占用,如何关闭端口

    用管理员权限打开命令提示符 如果要关闭3306端口 首先要查询此端口号对应的PID 则输入以下命令 1 输入 netstat ano findstr 3306 然后借助命令终止PID对应的进程 输入以下命令 2 输入 taskkill PI
  • 【C++简明教程】Python和C++指定元素排序比较

    Python 中的排序 在 Python 中 常用的排序就是 sorted 对于列表这种数据结构来说 还有 sort 方法 列表的排序 使用 sort 方法进行排序 以第二个值进行升序排序 列表的 sort 方法是原地排序 另外一种排序方法
  • CMake的使用--以ORCA避碰C++库为例

    1 安装cmake 链接 Download CMake 版本需下载Binary distributions这个模块下的 Windows x64 Installer cmake 3 27 1 windows x86 64 msi 注意事项 1
  • CentOS6.5 安装 抓包工具tcpdump

    1 裸机没装GCC 离线安装 首先到http vault centos org 6 5 os x86 64 Packages 下载用到的rpm包 包括 ppl 0 10 2 11 el6 x86 64 rpm cloog ppl 0 15
  • LabVIEW自带函数Database Toolkit实现SQL Server操作(上)

    目录 一 函数位置 二 函数一览 三 主要介绍 1 DB Tool Open Connection vi 2 DBTool Close Connection vi 3 Database Variant To Data vi 4 DBTool
  • 浅析Redux 的 store enhancer

    相信大家都知道Redux的middleware 中间件 的概念 Redux通过middleware可以完成发送异步action 网络请求 打印action的日志等功能 相对而言 Redux的store enhancer的概念 很多人并不是很
  • 【MLOps】第 5 章 : 生产准备

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 副本与ISR设计--Kafka从入门到精通(十四)

    上篇文章说了 broker的消息设计 采用紧凑的byteBuffer 存储设计主要包含attribute后三个表示压缩类型 还有crc效验 以及key和value 后面新增了时间戳 Broker消息设计 Kafka从入门到精通 十三 htt
  • js实现数学的排列组合

    js实现数学的排列组合 实现 组合 param arr 待选数组 param size 从数组里面要抽几个元素进行组合 function combination arr size 1 45 3 9 4 14 1 const r param
  • 如何二次封装Element-Plus table组件

    最近做了一个后台的项目 需要用到大量的表格组件 我就试着把它给封装了一下 记录一下 那么现在开始了 父页面代码
  • Linux_centos7_网络管理1_2

    测试网络连接状态 kingarthur localhost ping www google com PING www google com 174 37 175 229 56 84 bytes of data C www google co
  • nginx_upstream_check_module模块

    nginx upstream check module模块 一个更专业的模块 来专门提供负载均衡器内节点的健康检查的 这个就是淘宝技术团队开发的 nginx 模块nginx upstream check module 通过它可以用来检测后端
  • 静态链接和动态链接的区别

    在理解静态和动态 共享 库链接之间的区别之前 让我们先看一个典型程序的生命周期 从编写源代码到执行它 首先使用任何程序员选择的编辑器以文本文件的形式编写程序 然后必须对其进行编译以将文本文件转换为机器可以理解和执行的目标代码 通常我们编写的
  • 1216项目设计模板

    一 基本信息 目标上线时间 yyyy mm dd 项目人员 研发 测试 背景 二 功能需求 1 业务平台 1 业务的订购 配置默认的模板或者策略 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img I8vhSe47
  • 最全的Pandas 日期处理 超强总结!

    对于 Pandas 来说 可以处理众多的数据类型 其中最有趣和最重要的数据类型之一就是时间序列数据 时间序列数据无处不在 它在各个行业都有很多应用 患者健康指标 股票价格变化 天气记录 经济指标 服务器 网络 传感器和应用程序性能监控都是时
  • leetcode-135-分发糖果

    老师想给孩子们分发糖果 有 N 个孩子站成了一条直线 老师会根据每个孩子的表现 预先给他们评分 你需要按照以下要求 帮助老师给这些孩子分发糖果 每个孩子至少分配到 1 个糖果 相邻的孩子中 评分高的孩子必须获得更多的糖果 那么这样下来 老师
  • SpringBoot 集成sharding-jdbc 提示:Failed to configure a DataSource: ‘url‘ attribute is not specified ***

    问题描述 今天使用SpringBoot 集成sharding jdbc 4 1 1实现分库分表时报错 APPLICATION FAILED TO START Description Failed to configure a DataSou
  • 记录一次因now()函数应用周期性查不到数据的问题

    问题原因 查询sql使用了now 函数 测试环境数据库所在的容器日期不对 与实际时间晚8个小时 问题背景描述 某天下午快要下班的时候 大概五点的样子 某个测试小哥在系统里点击用户注册功能注册后 一切数据都正常生成后 登录新注册的用户 发现这