windows环境搭建ELK (由于elasticsearch开启了身份验证,所以连接时需要提供用户名、密码或者token,上面提到过elasticsearch默认用户是elastic,但是elastic是超级管理员,不允许直接连接,所以这里可以新建一个用户供kibana使用或者使用token的方式)执行成功后,可以在系统服务中查看到相应的服务,直接【启动】服务即可(可以根据需要设置自启)执行成功后,可以在系统服务中查看到相应的服务,直接【启动】服务即可(可以根据需要设置自启)跳转到bin目录,执行下面的代码将es注册为系统服务。
spring-boot jar包瘦身(fat-jar到thin-jar) 目前我司采用内网自建GitLab平台托管代码,fat-jar方式打包,每个应用jar包达到百兆。为了规避云服务带宽不足导致上次jar包缓慢的问题,我们在云服务器上安装了GitLab Runner(:依赖jar可以分离出来,从而保证我们打包出来的应用jar包很小(可能只有几兆甚至更小),而依赖jar在大部分情况下是不会改变的,所以每次发布的时候只需要把应用jar包上传即可。:所有的依赖都打到一个jar里面,导致jar包非常大(一个jar包上百兆),不利用网络传输(特别是云服务器来说带宽资源比较贵);...
spring-session-data-redis session更新失效问题解决 本文目录结构:一、问题复现二、问题排查三、问题解决一、问题复现现在的项目都由原先的单体架构向分布式架构演变,在这个过程中就会存在session共享的问题。单体架构只有一个JVM,所以内存中的数据可以共享,session直接保存在内存中,重启服务会导致session丢失,用户登录失效。分布式架构下基本都存在多个微服务,或者微服务集群,且版本迭代速度快,这些服务有各自的JVM,因此无法实现内存共享,这时就需要借助第三方存储空间()来实现内存共享,并且重启服务不会丢失session,能够保持用户登录态。将s
自定义HttpMessageConverter实现参数加解密 如果对于不理解,可以先看下【HttpMessageConverter逻辑梳理】这篇文章。本文要实现以下三种格式解密:以下一种格式解密:下面对以上四种情况分别展开本文目录结构:一、自定义注解二、封装类型接收参数三、自定义实体类接收参数四、json转实体类五、响应报文转json六、配置自定义converter七、使用一、自定义注解在理解的前提下,实现参数加解密应该是相对容易的事情。有两种加密解密方式:1.针对请求报文进行加密解密;2.针对请求报文中的属性字段进行加密解密。这里我们选择第2中实现方案。下
HttpMessageConverter逻辑梳理 本文目录结构:一、快速了解的机制二、结合解读解析请求报文机制三、结合解读解析响应报文机制四、创建自定义HttpMessageConverter实现参数加解密一、快速了解的机制快速过一遍相关代码(这里只摘取核心的代码,并注释方法作用,其余代码使用【…】省略,感兴趣的话可以自行查看源码)其实核心流程就是根据parameter去匹配resolver,然后将具体的参数解析工作交给匹配到的resolver,resolver再将解析工作委托给converter二、结合解读解析请求报文机制根据paramet
centos7 配置java服务开机自启 1.创建jar包启动、停止、重启脚本(例如:mall-uc.sh)name="服务标识"Xmx=xxxmXms=xxxmXmn=xxxmPermSize=xxxmMaxPermSize=xxxmpid="进程文件存放位置"jarName="jar包路径"start(){ if [ -f "$pid" ] then echo "$jarName is running !" exit 0; else echo -n "start ${jarName} ..." noh
windows下tomcat启动时生成进程文件 环境:windows tomcat6由于tomcat默认的shutdown.bat存在无法及时关闭进程的问题,进而可能导致tomcat同时存在两个进程在执行,导致schedule任务被重复执行。因此需要一种保证tomcat在同一时间点只能存在一个进程机制。解决方案:在tomcat启动时判断当前目录下tomcat.pid文件是否存在,如果存在则提示"tomcat is running",否则就在当前目录下创建tomcat.pid文件;在tomcat停止时,为了保险起见可以通过taskkill命令强.
springboot max-http-header-size配置导致内存溢出 9.15日,线上的一个微服务接口错误率突然提升的情况。于是连接上了远程服务器使用jps -l命令查看发现进程还在,但是无法稳定的对外提供服务。下面记录下问题定位、解决的过程一、问题排查既然进程还在,那就说明还没有死掉,于是我就开始着手排查使用top命令查看cpu占用情况,找到占用cpu最高的进程pid使用jps -l命令去打印出服务器内所有的java进程信息,然后查看是否有第1步中拿到的pid经过上述两步可以确定是问题出在某个java进程上根据以往经验,既然占用这么高的cpu,而系统此刻访问
线上服务导致cpu飙升问题排查 一、故障说明 昨晚突然收到线上服务器cpu报警,登录监控平台看了下发现cpu瞬间飙升到60%。第一反应就是使用top命令去查看,发现是一个java进程。于是立刻使用jps -l命令定位到该java进程,发现是一个后台服务,按理说晚上没什么人去使用后台服务,而且它也没有定时任务,查看了服务的日志都没有发现异常情况。二、故障排查 &
updlock实例分析 先给出一个场景,然后围绕这个场景展开讨论。场景:商品限购,商家在发布活动时,要求活动内的每个商品每位用户限购一个。假设现在有一张表活动订单表,记录了用户参与活动的情况。活动订单表(主键,活动主键,用户主键,商品主键)-- sql server 2008CREATE TABLE [dbo].[tbl_activity_order] ( [id] bigint NOT NULL, [activity_id] bigint NOT NULL, [user_id] bigint NOT NUL
net.sf.json踩坑( net.sf.json.JSONNull cannot be cast to java.lang.String) 最近运营反馈偶尔有一两笔订单出现卡单,无法充值的问题。正好今天不是很忙就和同事一起定位问题。因为是一个比较老的项目,可能当时开发人员没有开发规范,所以对于异常日志仅仅是在控制台打印并没有记录到异常日志,因此现在去定位问题只能通过业务日志和代码入手,这种方法最好的就是采用排查法了,通过排查最终将问题锁定在一段json解析的代码上。由于隐私的问题我这里就自己写段代码复现吧。import net.sf.json.JSONObject;public class JsonTest { public s
map空指针排查 前几天线上异常监控检测到一个NullPointerException,于是根据异常栈提示定位到具体发生异常的代码,这里记录下出现异常的原因。先来一段简单的代码来复习问题。public class TestObject{ private Integer status; public TestObject(Integer status){ this.status = status; } public static void main(String[] args){ Map<Tes