使用了这个神器,让我的代码bug少了一半(下)

本文涉及的产品
PolarClaw,2核4GB
简介: 使用了这个神器,让我的代码bug少了一半(下)

正文


二 sonarqube如何搭建


官网地址:https://www.sonarqube.org/,选择“文档”菜单

0000.png

在出现的文档页面中可以选择版本,目前最新的版本是8.5。笔者尝试过三个版本:

8.5:它是目前最新的版本,需要安装JDK11,并且只支持oracle、sqlserver和PostgreSQL数据库

7.9:它是一个长期支持的版本,非常文档,也需要安装JDK11,并且只支持oracle、sqlserver和PostgreSQL数据库

7.6:它是一个老版本,只需安装JDK8,支持oracle、sqlserver和PostgreSQL数据库,以及mysql数据库。

刚开始我们为了省事,安装了 7.6的版本,因为mysql数据库我们已经在用了,无需额外安装其他数据库,并且JDK8也在使用,安装成本最小。但是后来发现,如果需要安装汉化版插件,或者mybatis插件,这些插件要求的SonarQube版本必须在7.9以上,并且需要运行在JDK11以上。经过权衡之后,我们决定安装最新版的。


2.1 安装JDK11和postgreSQL


  JDK下载地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html


  JDK的安装比较简单,我在这里就不过多介绍了,网上有很多教程。

  PostgreSQL它自己号称自己是世界上最先进的开源数据库,具有许多功能,旨在帮助开发人员构建应用程序,管理员来保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集的大小。除了免费和开源之外,PostgreSQL也是高度可扩展的。例如,您可以定义自己的数据类型,构建自定义函数,甚至可以使用不同的编程语言编写代码,而无需重新编译数据库。

  PostgreSQL的安装与使用可以参数:https://www.jianshu.com/p/7d133efccaa4


2.2 从zip文件安装sonarqube


SonarQube无法在root基于Unix的系统上运行,因此,如有必要,请为SonarQube创建专用的用户帐户。

$ SONARQUBE-HOME(下面)指的是SonarQube发行版已解压缩的目录的路径。


设置对数据库的访问


编辑$ SONARQUBE-HOME / conf / sonar.properties以配置数据库设置。模板可用于每个受支持的数据库。只需取消注释并配置所需的模板,然后注释掉专用于H2的行:


Example for PostgreSQL
sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube


配置Elasticsearch存储路径


默认情况下,Elasticsearch数据存储在$ SONARQUBE-HOME / data中,但不建议将其用于生产实例。相反,您应该将此数据存储在其他位置,最好是在具有快速I / O的专用卷中。除了保持可接受的性能外,这样做还可以简化SonarQube的升级。

编辑$ SONARQUBE-HOME / conf / sonar.properties以配置以下设置:

sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp


用于启动SonarQube的用户必须具有对这些目录的读写权限。


启动Web服务器


默认端口为“ 9000”,上下文路径为“ /”。这些值可以在$ SONARQUBE-HOME / conf / sonar.properties中进行更改

sonar.web.host=192.0.0.1
sonar.web.port=80
sonar.web.context=/sonarqube


执行以下脚本来启动服务器:


  • 在Linux上:bin / linux-x86-64 / sonar.sh start
  • 在macOS上:bin / macosx-universal-64 / sonar.sh start
  • 在Windows上:bin / windows-x86-64 / StartSonar.bat


调整Java安装


如果服务器上安装了多个Java版本,则可能需要明确定义使用哪个Java版本。

要更改SonarQube使用的Java JVM,请编辑$ SONARQUBE-HOME / conf / wrapper.conf并更新以下行:

wrapper.java.command=/path/to/my/jdk/bin/java

您现在可以在http:// localhost:9000浏览SonarQube (默认的系统管理员凭据为admin/ admin)。第一次访问这个地址比较会停留在这个页面一段时间,因为SonarQube会做一些初始化工作,包含往空数据库中建表

000.png


初始化成功后运行的页面:

00.png



同时会生成20多张表:

0.png


2.3 安装插件


根据个人需要,可以安装汉化插件,sonarqube默认是英文界面。

github地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh


将项目下载编译打包后,将jar放到$SONARQUBE-HOME\extensions\plugins

目录下即可,然后执行:./sonar.sh restart命令重启sonarqube服务。


此外,还有mybatis插件

gitee地址:https://gitee.com/mirrors/sonar-mybatis

我个人用过,觉得作用不大,不过可以基于这个代码扩展自己需要的功能。


三 sonarqube如何使用


3.1 在maven项目中集成sonarqube


先在maven的settings.xml文件中增加如下配置:

<pluginGroups>
    <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
    <profile>
      <id>sonar</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <!-- Optional URL to server. Default value is http://localhost:9000 -->
        <sonar.host.url>
          http://localhost:9000
        </sonar.host.url>
      </properties>
    </profile>
</profiles>

然后在pom.xml文件中增加配置:


<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.3.0.603</version>
</plugin>


在项目目录下运行代码检测命令:  mvn clean complie -U -Dmaven.test.skip=true sonar:sonar


看到这几句话,就表示检测成功了

32.png


然后在sonar后台查看检测报告

00000.png

报告里面包含:bug、漏洞、异味、安全热点、覆盖、重复率等,对有问题的代码能够快速定位。


点击某个bug可以查看具体有问题代码:


没有关闭输入流问题:

0000000.png


空指针问题:

000000000.png

错误的用法:

00000000000.png

SimpleDateFormat不应该被定义成static的。

检测出的代码问题类型太多,这里就不一一列举了。总之,记住一句话:sonar很牛逼。它不光可以检测出代码问题,还对一些不好的代码写法和用法有更好的建议。


彩蛋


sonarqube非常强大,上面只介绍了它的基本用法。一般情况下,我们可以使用jenkins配置需要代码检测的项目,从gitlab上下载代码,执行maven编译打包代码测试命令,可直接生成报告。jenkins触发执行代码检测的时机是:1.有代码提交,或者指定比如test分支有代码提交,项目数量少可以这样做。2.定时执行,我们公司就是配置在凌晨定时执行,因为jenkins部署的项目太多了,为了不影响正常的项目部署。

此外,我们可以自定义代码检测的执行规则,根据实际的项目需求自己开发插件,比如:我们自己开发了mybatis插件,扫描mapper和xml文件名称不一致的情况。

9.png


总之,sonar的功能非常强大,强烈建议大家在项目中使用,真的可以减少很多隐藏的bug,提高代码质量,如果你用过就会发现它的好处。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 运维 安全
闲鱼交易实时资损防控体系
聊一聊资损防控体系和闲鱼实践
7063 0
闲鱼交易实时资损防控体系
|
10月前
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
711 0
|
11月前
|
机器学习/深度学习 自然语言处理 数据可视化
⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践
本文整理自潘兰天(蚂蚁数据智能团队数据分析平台技术专家)在DA数智大会2025·上海站的演讲实录。
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1219 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
Java 定位技术 API
Docker: java.lang.NoClassDefFoundError: sun.awt.X11FontManager
Docker: java.lang.NoClassDefFoundError: sun.awt.X11FontManager
Docker: java.lang.NoClassDefFoundError: sun.awt.X11FontManager
|
存储 监控 算法
一次通过dump文件分析OutOfMemoryError异常代码定位过程
OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。借助MAT内存分析工具分析可能的内存泄漏代码问题定位。
859 1
一次通过dump文件分析OutOfMemoryError异常代码定位过程
|
Unix iOS开发 Ruby
Mac 从零安装cocoapods
最近申请换了台 MacBook Pro(之前用的是MacBook Air),一台干净的像小孩子屁股一样的电脑,iOS开发相关的常用软件一个也没有。当下载了item2(本人很不喜欢Mac自带的终端,所以还是习惯的下载了item2,如果有小伙伴需要了解,请点击https://www.jianshu.com/p/93f5c3491954)Xcode和项目后,由于我们项目用了cocoapods,所以不得不安装它。关于cocoapods的介绍就不多说了,下面直接开始安装步骤吧!
Mac 从零安装cocoapods
|
JSON 关系型数据库 MySQL
MySQL全文搜索与JSON支持:高效检索与灵活数据处理
本文深入探讨了MySQL数据库中的全文搜索与JSON支持,通过详细的代码示例,阐述了全文搜索的原理、全文索引的创建,以及JSON数据类型的使用与操作。全文搜索在数据库中的重要性日益凸显,MySQL提供了全文索引来实现高效的文本数据检索,通过MATCH AGAINST语句,可以轻松地进行全文搜索操作。此外,MySQL的JSON支持为半结构化数据的存储和查询提供了灵活的解决方案,您可以存储JSON对象、数组等数据,并使用JSON函数来查询和修改数据。
1621 0
|
数据采集 JSON NoSQL
python爬虫 Appium+mitmdump 京东商品
python 爬虫 Charles + appium + mitmproxy 实现 app 京东商品数据获取
1328 0
|
Ubuntu
Ubuntu系统配置国内源教程 - 蓝易云
以上就是在Ubuntu系统中配置国内源的步骤。
1994 0

热门文章

最新文章