ognl

阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!

蹲街弑〆低调 提交于 2020-08-17 15:29:57
作者 | 汪吉 【Arthas 官方社区正在举行征文活动,参加即有奖品拿~ 点击投稿 】 一、入门步骤 1. 安装 https://arthas.gitee.io/install-detail.html 上述命令会下载启动脚本文件 as.sh 到当前目录: curl -L https://alibaba.github.io/arthas/install.sh | sh or as.sh 启动: curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc 2. 在线教程体验 https://alibaba.github.io/arthas/arthas-tutorials?language=cn 当然也可以自己本地体验一下~自己通过下载一个 arthas-idea-plugin 的体验 demo 直接本地上手。 https://github.com/WangJi92/arthas-plugin-demo 全局命令说明 -x 是展示结果属性遍历深度,默认为 1 -n

arthas命令watch观察方法调用(上)

不羁的心 提交于 2020-08-16 06:20:46
arthas 是一个 Java 开源诊断神器。 今天分享一个非常重要的命令 watch ,官网定义这个方法的功能如下:让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。 由于涉及到比较多的命令参数和 ognl 表达式的应用,内容比较多,所以分了上下两期,上主要讲官网 Demo 内容,下主要讲实践。顺道说一下,官网的文档标题和实际 Demo 有几处不太一致的地方,大家如果要学习的话,以 Demo 代码展示为主就好。 主要参数 参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观察表达式 condition-express 条件表达式 [b] 在方法调用之前观察 [e] 在方法异常之后观察 [s] 在方法返回之后观察 [f] 在方法结束之后(正常返回和异常返回)观察 [E] 开启正则表达式匹配,默认为通配符匹配 [x:] 指定输出结果的属性遍历深度,默认为 1 arthas命令watch观察方法调用(上) 点击观看视频 特别说明 watch 命令定义了4个观察事件点,即 -b 方法调用前, -e 方法异常后, -s 方法返回后, -f 方法结束后 4个观察事件点 -b 、 -e 、 -s 默认关闭, -f 默认打开

mybatis报shr错误,OGNL表达式问题BuilderException: Error evaluating expression 'shr

家住魔仙堡 提交于 2020-08-13 17:00:30
使用Mybatis- Plus 3.x版本时,普通的保存数据控制台报异常,大致如下 : Caused by : org . apache . ibatis . builder . BuilderException : Error evaluating expression 'shr ! = ' 'and shr !=null' . Cause : org . apache . ibatis . ognl . ExpressionSyntaxException : Malformed OGNL expression : 'shr ! = ' 'and shr !=null' [ org . apache . ibatis . ognl . ParseException : Encountered " " shr" Was expecting one of : < EOF > "," . . . "=" . . . "?" . . . "||" . . . "or" . . . "&&" . . . "and" . . . "shr" . . . 二、思考 首先想的是自己业务代码以及数据库字段是否存在问题,仔细检查了一遍发现并没有问题。然后仔细观察异常,发现其中有个关键字 shr ,全局搜索了下,正好是实体类字段shr(审核人)。因为是个5年前的项目,所以也没有吐槽数据库命名规范了

Thymeleaf入门到吃灰

大城市里の小女人 提交于 2020-08-12 01:07:57
Thymeleaf    官网部分翻译:反正就是各种好 Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎 Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和Freemarker等,而Thymeleaf与SpringMVC的视图技术,及SpringBoot的自动化配置集成非常完美,几乎没有任何成本,你只用关注Thymeleaf的语法即可。 Thymeleaf的特点 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能

阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!

白昼怎懂夜的黑 提交于 2020-08-12 00:42:07
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一、入门步骤 1. 安装 上述命令会下载启动脚本文件 as.sh 到当前目录: curl -L https://alibaba.github.io/arthas/install.sh | sh or as.sh 启动: curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc 2. 在线教程体验 当然也可以自己本地体验一下~自己通过下载一个 arthas-idea-plugin 的体验 demo 直接本地上手。 github.com/WangJi92/ar… 全局命令说明 -x 是展示结果属性遍历深度,默认为 1 -n 是执行的次数 ,q 退出 -c classloader 的hash值 退出 q ,关闭 stop 3. 了解最常用的trace、watch的功能 watch和trace 是arthas 诊断中对于开发人员解决线上的问题最常用的功能! trace

Java openrasp学习记录(一)

早过忘川 提交于 2020-08-11 20:04:57
前言 最近一直在做学校实验室安排的项目,太惨了,没多少时间学习新知识,不过rasp还是要挤挤时间学的,先从小例子的分析开始,了解rasp的基本设计思路,后面详细阅读openrasp的源码进行学习!欢迎在学习相关知识的师傅找我交流!如本文有所错误请指出~ 例子1 https://github.com/anbai-inc/javaweb-expression 一个hook ognl、spel、MVEL表达式注入的例子 用的是asm5进行字节码修改 采用premain进行插桩,重写transform方法 expClassList是要hook的类,这里定义在MethodHookDesc 这里判断hook点通过类名,具体其中的方法名,以及方法的描述符 其中expClassList中定义了具体要hook的类,就mvel、ognl、spel三种 匹配到以上三种类后即重写visitMethod方法,匹配具体要hook的方法名和方法描述符,如果匹配到了,则重写MethodVisitor的visitCode方法,进行字节码修改,这里因为是表达式注入,因此这里涉及到string类型的表达式,因此获取传到hook函数处的表达式字符串压入操作数栈,并通过调用expression方法弹出该值进行检测, 这里要涉及到操作数栈和局部变量表,因此要清楚原本的方法帧中局部变量表下标索引几代表的是输入的表达式:

利用 Arthas 精准定位 Java 应用 CPU 负载过高问题

≡放荡痞女 提交于 2020-08-11 01:14:09
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥! 以前碰到类似问题,可能会考虑使用 top -Hp 加 jstack 命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是 Alibaba 开源的 Java 诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档: https://alibaba.github.io/arthas 这次我们利用它来排查 CPU 负载高的问题。CPU 负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个命令:thread,这个命令会显示所有线程的信息,并且把 CPU 使用率高的线程排在前面。 [arthas@384]$ thread Threads Total: 112, NEW: 0, RUNNABLE: 26, BLOCKED: 0, WAITING: 31, TIMED_WAITING: 55, TERMINATED: 0 ID NAME STATE %CPU TIME 108 h..ec-0 RUNNABLE 51 4011:48

利用 Arthas 精准定位 Java 应用 CPU 负载过高问题

牧云@^-^@ 提交于 2020-08-10 23:33:31
最近我们线上有个应用服务器有点上头,CPU 总能跑到 99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥! 以前碰到类似问题,可能会考虑使用top -Hp 加 jstack命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。 申请阿里云服务时,可以使用 2000元阿里云代金券 ,阿里云官网领取网址: https://dashi.aliyun.com/site/yun/youhui 今天向大家推荐一款更高效更精准的工具:Arthas! Arthas 是 Alibaba 开源的 Java 诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档: https://alibaba.github.io/arthas 这次我们利用它来排查 CPU 负载高的问题。 CPU 负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个命令:thread,这个命令会显示所有线程的信息,并且把 CPU 使用率高的线程排在前面。 [arthas@384]$ thread Threads Total: 112, NEW: 0, RUNNABLE: 26, BLOCKED: 0, WAITING: 31, TIMED_WAITING: 55, TERMINATED: 0 ID NAME STATE %CPU TIME

MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

冷暖自知 提交于 2020-08-07 11:20:42
回复“ 1024 ”获取 2000+ 道互联网大厂面试题 MyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现, 解决了这个麻烦。 MyBatis通过 OGNL 来进行动态 SQL 的使用的。目前, 动态 SQL 支持以下几种标签: 1 数据准备 为了后面的演示, 创建了一个 Maven 项目 mybatis-dynamic, 创建了对应的数据库和表 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `student_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号', `name` varchar(20) DEFAULT NULL COMMENT '姓名', `phone` varchar(20) DEFAULT NULL COMMENT '电话', `email` varchar(50) DEFAULT NULL COMMENT '邮箱', `sex` tinyint(4) DEFAULT NULL COMMENT '性别', `locked` tinyint(4) DEFAULT NULL COMMENT '状态(0:正常,1:锁定)

SpringBoot+Thymeleaf实现数据渲染

孤街浪徒 提交于 2020-07-27 12:26:11
目录 Thymeleaf简介 1.是什么 2.优点 3.常用标签 4.标准表达式语法 SpringBoot+Thymeleaf交互 1.交互代码 2.关键代码解析 Thymeleaf简介 1.是什么 Thymeleaf是spring boot推荐使用的模板语法,它可以完全替代 JSP 。 从代码层次上讲:Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。 2.优点 开箱即用,它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言; Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。 有网无网的情况下模版页面都可以执行,美工的页面拿来就可以用,相对jsp减少了额外的标签,页面也更加简洁。 3.常用标签 属性 作用 优先级(数字越小,优先级越高) th:text 设置当前元素的文本内容 7 th:value 设置当前元素的value值,类似修改指定html标签属性的还有th:src,th:href 6 th:each 遍历循环元素,和th:text或th:value一起使用 2 th:if 条件判断