关闭

java问题查找------从源头查找

标签: redis系统
366人阅读 评论(0) 收藏 举报
分类:

1、来源

前两天公司系统出现一个问题,就是咨询的问题,系统统统都回答不上;

首先介绍一下公司系统的基本流程:
这里写图片描述

公司做的一个用户咨询流程,大概流程就是在处理流程中,会把预处理的一些结果放在redis里面,然后再调用应答服务接口,应答服务接口通过redis获取对应的预处理结果。但是由于公司初始架构调整,造成了系统有两条处理线:
这里写图片描述

就是 处理流程1 与处理流程2对应相同代码但是环境是两套不同的环境,这就造成了如果应答服务2从redis1里面获取预处理结果是获取不到。(当然这个流程本身是不合理的)

2、定位问题

1、初步定位
前两天发现走处理流程2到调用应答服务2这个流程返回给用户咨询的答案不对,所以去排查。首先查看日志,发现应答服务2相同咨询条件先比应答服务1少拿到数据,然后预测是redis的原因。但是由于日志打印太少,不确定。首先需要排除掉代码原因,将处理流程1接入调用应答服务2,由于处理流程1一直正常使用,如果接入应答服务2,应答服务2应该正常工作,接入后,发现确实正常工作,且给出了正常答案;开始以为应答服务2没有问题,是处理流程2的问题。可是找了半天没有找到才发现接入应答服务2的时候 处理流程1未修改redis那么调用应答服务2的时候流程就是这样的:
![这里写图片描述](http://img.blog.csdn.net/20150706194246216)

明显是读取到两个redis但是可以正常工作,定位出来确实是应答服务2缓存链接出错额原因,链接到了redis1上面去了。
2、原因分析:
既然是redis原因就查找原因吧,直接在代码里面打开配置文件我们redis配置就是常见的spring配置的:

<bean id="redisClient" class="com.cli.ReloadableClientFactoryBean">
        <property name="configClient" ref="configClient" />
        <!-- 配置拥有集群的客户端配置ID(必选) -->
        <property name="configId" value="${db_configId}" />
        <!-- 配置拥有集群的客户端配置Token(必选) -->
        <property name="token" value="${db_token}" />
    </bean>

这个多简单,马上在代吗上面走到对应的properties配置文件:

db_configId=/redis/cluster/17
db_token=1417623612434

发现这个配置项确实是我们需要配置的redis2呀,可是现在系统表现就是连接到了redis1呀,现在就是陷入了死胡同,又重新去分析看是不是哪儿漏掉了或者查看代码片逻辑是否正确。多次重启应用还是不对。
多次修改对应properties,查找是否系统没有读取到properties文件。在这个上面耗了有大半天。心情也是各种烦躁。

**注意:查看这些数据我们都是通过代码查看,在线上也是只查看了打包后对应的properties是否正确。但是却忘了查看我redis注入时,注入的参数是否真正注入**。

最后在无意间看到注入的redis POM文件在打包以后为:

<bean id="redisClient" class="com.cli.ReloadableClientFactoryBean">
        <property name="configClient" ref="configClient" />
        <!-- 配置拥有集群的客户端配置ID(必选) -->
        <property name="configId" value="/redis/cluster/16" />
        <!-- 配置拥有集群的客户端配置Token(必选) -->
        <property name="token" value="1417623612433" />
    </bean>

这个不对呀,按理说如果从properties里面获取数据,maven打包不应该就把数据替换掉了,应该还是原来的

<bean id="redisClient" class="com.cli.ReloadableClientFactoryBean">
        <property name="configClient" ref="configClient" />
        <!-- 配置拥有集群的客户端配置ID(必选) -->
        <property name="configId" value="${db_configId}" />
        <!-- 配置拥有集群的客户端配置Token(必选) -->
        <property name="token" value="${db_token}" />
    </bean>

通过查找发现是在大系统的POM下,不知道谁将这个配置写在系统POM里面:

    <!-- db-redis test -->
                <db_configId>/redis/cluster/16</db_configId>
                <db_token>1417623612433</db_token>
                <db_used>true</db_used>

这下就真相大白了,原来是maven自己pom里面有对应参数时,打包就直接替换掉成了对应值,不再是获取配置文件的占位符,我们就算配置了对应参数properties配置文件也是没用的
3、总结
以前有个牛人说,查找问题可以从最上游开始找,也是可以冲最下游开始找,但是切记不要从中间查找问题,不要想着这儿有问题就从这儿找。找问题是需要分析的。想想这个问题
1、我们并没有找到最下游是什么,以为properties文件就是我们系统的最下游,其实注入Bean的配置文件才是最下游,明确什么是最下游没有搞清楚。还有就是最好拿着生效的数据分析,这个问题如果我们在代码里面是查看不出来的,如果直接查看maven后上线的应用是最可靠的分析依赖。
2、分析过程中,没有逻辑,就是觉得哪儿就是哪儿。这个就是查找问题的大忌。
3、这种数据注入问题,通常是由多个相同配置文件造成的,其实只需要搜索搜索就可以看出来。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

[经典面试题]二分查找问题汇总

【题目】 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1。 【分析】 此题也就是求target在数组中第一次出现的位置。这里可能会有人想先直接...
  • SunnyYoona
  • SunnyYoona
  • 2015-01-05 12:16
  • 3299

Java查找算法--线性查找

原文地址:http://blog.csdn.net/u014494703/article/details/51276361 常见的三大线性查找: 线性查找二分查找(折半查找)分块查找 ...
  • tanga842428
  • tanga842428
  • 2016-09-20 19:53
  • 1595

多线程问题的总结

多线程问题的总结     转http://blog.csdn.net/jack_chen1994 1、多线程有什么用?  一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么...
  • u012369373
  • u012369373
  • 2016-08-17 21:56
  • 505

[Java]各种基础的查找和排序算法总结

查找方法: 1.顺序查找。 按数组的顺序从前往后一直比较,直到找到目标值返回。 优点:对数组的结构没有特定的要求,算法简单。 缺点:当数组个数n较大时,效率低下。 时间复杂度:最大时间复杂度是O(n)...
  • qq284565035
  • qq284565035
  • 2014-12-02 16:30
  • 1783

Java 查找算法

二分查找 Hash表 二叉树 B Tree
  • three_man
  • three_man
  • 2015-07-08 19:49
  • 12621

Java数组的几种常用操作方法(排序算法及查找)

数组的查找查找是在数组中寻找特定元素的过程。线性查找法线性查找法将要查找的关键字key与数组中的元素逐个进行比较。如果匹配成功,线性查找法则返回与关键字匹配的元素在数组中的下标;如果没有匹配成功,则返...
  • jxq1994
  • jxq1994
  • 2016-07-27 18:36
  • 1963

黑马程序员——Java基础查找算法:顺序查找和二分查找

——- android培训、java培训、期待与您交流! ———- /* 需求:在数组中查找指定的数据 一、顺序查找法思路: 遍历整个数组,将指定要找的数与数组中的所有元素比较,如果相...
  • java888kankan
  • java888kankan
  • 2015-04-12 21:24
  • 455

二分查找(Binary Search) 常见问题解决方法总结

缘由 今天浏览 何登成的技术博客  无意中发现了写的blog,二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现。 如下: 问题背景 今年的实习生招聘考试,我出了一道...
  • gfsfg8545
  • gfsfg8545
  • 2013-12-13 21:48
  • 8620

查找---分块查找

分块查找要求把一个数据分为若干块,每一块里面的元素可以是无序的,但是块与块之间的元素需要是有序的。(对于一个非递减的数列来说,第i块中的每个元素一定比第i-1块中的任意元素大)       分块查找的...
  • u012017783
  • u012017783
  • 2017-04-18 18:44
  • 894

java常用的排序和查找算法

...
  • zxwd2015
  • zxwd2015
  • 2017-03-03 19:19
  • 241
    个人资料
    • 访问:9411次
    • 积分:224
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论