0%

前言

有时候服务器上部署了N多的服务,只知道端口号,你想知道这个服务是谁,路径在哪,这时候就需要一些命令来查询了

方法

1、命令lsof, 用法

1
2
3
4
[root@localhost]# lsof -i:80
[root@localhost]#

# 以上是80端口没有被占用
1
2
3
4
5
6
7
[root@localhost sbin]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 8246 root 6u IPv4 64233 0t0 TCP *:http (LISTEN)
nginx 8247 nobody 6u IPv4 64233 0t0 TCP *:http (LISTEN)
[root@localhost sbin]#

#这个是80端口被占用了
阅读全文 »

前言

项目上使用了druid数据源,可以监控sql,慢sql等,一般只在测试环境下使用,生成环境是需要关掉或者加权限控制的,最近线上项目漏洞扫描发现了这个问题,druid的监控页面默认是没有权限的,可以随意进入,下面说下如何修复这个问题

解决

两种方式,一是加权限就是登录名和密码,二是直接关掉sql监控功能,如非必要,建议线上环境直接关掉sql监控

阅读全文 »

前言

Kotlin中使用?.let来处理对象非空时的逻辑,那如果为空又怎么办呢?

解决
1
2
3
4
5
str?.let {
//非空
} ?: let {
//为空
}

如果为空不需要写很多代码,比如只是打印以下,那可以这么写

1
2
3
str?.let {
//非空
} ?: println("23")

前言

最近迷恋上了kotlin语言,语法糖真的很甜,建议大家都试试

问题

因为项目整体使用kotlin开发,Room数据库也是Google自家的,kotlin支持比价好,所以项目都改用了Room数据库,最近项目上需要用到模糊查询,一位和mysql是一样的% :name %,但是发现这样不对

解决

经过查询后,Room中模糊查询需要这样 || 代替 + 号连接符,有点抽象,来个示例

示例
1
2
3
4

@Query("SELECT * FROM company WHERE addr LIKE '%' || :addr || '%' ")
fun selectAddr(addr: String): List<Company>

前言

最近在维护一个老项目时,build项目报错error: resource android:attr/dialogCornerRadius not found,因为项目是之前很早的项目,但是需要引用一个三方包,引用这个包需要将项目迁移到AndroidX,引入之后就报错了,下面说下解决办法

问题

具体的报错信息如下

1
/build/intermediates/res/merged/release/values-v28/values-v28.xml:11: error: resource android:attr/dialogCornerRadius not found

将项目迁移到AndroidX,在gradle.properties里面配置如下

1
2
android.useAndroidX=true
android.enableJetifier=true
解决

经过查看是因为compileSdkVersion版本太低,需要升级,我升级到29,一般这个改了之后,后面的targetSdk同样需要保持一样的版本号,包括依赖都需要升级到相同的版本,避免出现其他奇怪的问题

1
2
3
android {
compileSdkVersion 29
}

前言

最近自用的服务器上存储占用越来越高,因为跑了docker,有五六个微服务,每次build之后存储总会多占用一点,长期以往,占用了挺多的,下面记录下清理方法

容器清理
1
2
3
4
5
docker container prune :  仅删除停止运行的容器。

docker rm -f $(docker ps -aq) : 删除所有容器(包括停止的、正在运行的)。

docker container rm -f $(docker container ls -aq) : 同上。
阅读全文 »

前言

最近某项目上检测出了一堆第三方jar包的漏洞,需要升级,此处记录下升级方法

过程

一般都是升级最新版本即可,不过要仔细测试,因为一些跨大版本的升级很有可能不兼容以前的包,方法调用、传参会又变化,所以此处一定要注意,不过大部分一般都直接升级版本号即可

此处以升级tomcat版本号为例说一下

  1. 方法1(不推荐)
    我们可以在引用web启动器spring-boot-starter-web的地方,排除这个spring-boot-stater-tomcat子启动器。然后在依赖中从新加入自己想要的内嵌版本,这样就可以实现更换SpringBoot内嵌Tomcat版本的目的了。注意这并不是一种推荐的解决方案,这其实是一种不明就里的解决方案。真正的省时省力的还是方法二

  2. 方法2(推荐)

    阅读全文 »

前言

项目上最近要升级fastjson2,记录下使用过程

添加依赖

fastjson v2中,groupId1.x不一样,是com.alibaba.fastjson2

Maven:

1
2
3
4
5
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.15</version>
</dependency>

Gradle:

1
2
3
dependencies {
implementation 'com.alibaba.fastjson2:fastjson2:2.0.15'
}
阅读全文 »

前言

最近项目上升级了fastjson2,据说2比1又快了,重点是之前的fastjson漏洞太多,所以干脆直接升2了,下面记录下springboot集成消息抓换器的用法

使用

在Fastjson2中,同样可以使用FastJsonHttpMessageConverterFastJsonJsonView 为 Spring MVC 构建的 Web 应用提供更好的性能体验。

使用 FastJsonHttpMessageConverter 来替换 Spring MVC 默认的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化和反序列化速度。

Package: com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter

阅读全文 »

前言

最近在项目上用到了kotlin的差集,然后来了解以下kotlin 集合的交集、并集、差集,都是kotlin原生支持的几种操作

交集

2个集中中共同的部分,kotlin提供了 中缀表达式和普通的函数方法调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
val o1 = setOf(1, 2, 4)
var o2 = setOf(2, 3, 6)

/**
* 交集
*/
@Test
fun testIntersect() {
val i1 = o1 intersect o2
val i2 = o1.intersect(o2)
println(i1 == i2)
println(i1)
}

运行结果

1
2
true
[2]

其中o1 intersect o2是中缀表达式,这是kotlin中比较强大的一部分,看起来更直观

阅读全文 »