Java程序猿搬砖笔记(八)

作为码农平时搜集一些小知识点个人认为是个不错的习惯,书上说

好记性不如烂笔头

我想即使是以前忽略或者新get的很简单的东西,自己动手记下来不管如何印象也会更深刻。

mybatis的配置打印的是info级别日志 线上环境建议去除

1
2
3
4
5
6
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
#打印sql
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
call-setters-on-nulls: true

MySQL的GROUP_CONCAT给值加上单引号后再拼接

语法:

1
SELECT GROUP_CONCAT(DISTINCT '''',待拼接字段,'''') FROM 表名

示例代码:

1
2
select GROUP_CONCAT(DISTINCT '''',company,'''')  from t_awards_detail WHERE company_type='1';
UPDATE t_awards_detail SET company_type='3'

返回数据:
‘上海产业研究院’,‘上海公司’,‘上海曦智科技有限公司’

Linux查询某个进程JVM占用情况

语法:

1
jstat -gc 进程号  刷新时间

示例代码:

1
2
-- 查询进程6126的JVM占用情况 每隔3秒刷新一次
jstat -gc 6126 3000

Linux查询某个进程CPU、内存占用情况

1
top -H -p 进程id

MySQL的concat()、concat_ws()和group_concat()的用法

group_concat()对多字段拼接操作示例代码:

1
group_concat(column1,'拼接字符串'column2 SEPARATOR '分割字符串')

例如,筛选不同状态的数量、部门和用户拼接数据sql如下:

1
2
3
SELECT STATUS,COUNT(id),GROUP_CONCAT(reply_department,'-',reply_user SEPARATOR '、') 
FROM t_sub_order WHERE main_order_id='1'
GROUP BY status

查询结果如下所示:
在这里插入图片描述
参考链接

Java导出大批量数据的优化过程

  • 使用EasyExcel生成导出文件流
  • 异步把文件流上传到服务器,成功后更新文件上传状态
  • 用户去页面下载
    10W+ 的数据从生成Excel文件流到上传只要8秒,原来约要8分钟。
    参考链接

request.getParameter(“ticket”)方法

  • 接口传参为form表单格式提交,即Content-Type为application/x-www-form-urlencoded类型
  • /web/auth/v1/login/getUserRight?ticket=1234567。
    只有这两种格式可以取到参数,取不到JSON格式的参数。

MySQL按中文拼音字母排序

如果表字段使用的GBK编码的话,我们可以直接order by value ,因为GBK本身就是按照拼音字母排序ABCDEFGHIGK…,当第一位相同的时候会比较第二位,以此类推。 如果表字段使用的UTF-8编码的话,通常我们都会的编码,这样我们可以使用MySQL的convert方法开转换gbk进行排序。
举例:

1
SELECT * FROM TEST ORDER BY CONVERT(value USING GBK) ASC/DESC

自定义排序

自定义排序是根据自己想要的特定字符串(数字)顺序进行排序。
主要是使用函数 FIELD(str,str1,str2,str3,…)
MySQL的自定义排序,str与str1、str2、str3…进行比较,并按照str1,str2,str3…的顺序输出,如果遇到str为null或者不存在str1,str2,str3…中的情况的则序列为0,
例1:

1
SELECT * FROM TEST ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC

例2:

1
SELECT * FROM TEST WHERE VALUE IN('test1','test2','test3','test4') ORDER BY FIELD(value,'test1','test2','test3','test4') ASC/DESC 

自定义排序(详细)

  • case when 转换实现自定义排序
  • mysql排序函数filed 实现自定义排序(推荐)
  • 函数locate 实现自定义排序
  • 函数lnstr 实现自定义排序
  • 利用数据字典实现自定义排序

参考链接

Linux将一个服务器上的文件或者文件夹复制到另一个服务器上

scp命令

命令语法:

1
2
3
4
5
6
7
8
9
10
11
// 从本地主机传输文件到远程主机
scp [本地文件路径] [用户名]@[远程主机IP地址]:[目标路径]

// 从远程主机传输文件到本地主机
scp [用户名]@[远程主机IP地址]:[远程文件路径] [本地目标路径]

// 传输整个目录
scp -r [本地目录路径] [用户名]@[远程主机IP地址]:[目标路径]

// 指定端口
scp -P [端口号] [本地文件路径] [用户名]@[远程主机IP地址]:[目标路径]

示例:

1
[award_dev@localhost ~]$ scp -r /opt/aspire/product/award_dev/testMove award_dev@10.12.7.182:/home/award_dev/
1
2
3
4
5
6
7
The authenticity of host '10.12.7.182 (10.12.7.182)' can't be established.
ED25519 key fingerprint is SHA256:2wVRM0wwyLswkz2qgc/osZnRRvMlLRYrOSrHqTUVqVA.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: 10.12.7.124
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.12.7.182' (ED25519) to the list of known hosts.
award_dev@10.12.7.182's password:

密码输入成功就可以迁移过去,不过存在中文文件名的会有问题(文件名改为了数字且内容为空)。

解决中文文件名迁移问题:
1、现在本地机器给待迁移文件夹打压缩包
命令: tar -zcvf filename.tar.gz dir/file
2、scp命令迁移到新服务器
3、在新服务器中解压
命令: tar -zxvf tarname.tar.gz -C 指定解压后文件存放地址
参考链接1参考链接2

如果远程服务器是sftp服务器,用scp命令可能会不成功,这时候需要使用sftp命令传输。

sftp命令

命令语法:

1
sftp -oPort=[端口号] [用户名]@[ip地址]

使用示例:
先进入本机待传文件的目录 -> 用命令连接上远程sftp服务器 -> 进入远程待接收文件的目录 -> put 文件名

1
2
3
4
5
6
7
8
9
10
[award_server@localhost jlwz-innovation]$ sftp -oPort=55521 package@10.217.247.13
Authorized only. All activity will be monitored and reported
package@10.217.247.13's password:
Connected to 10.217.247.13.

sftp> cd /upload/jlwz/testsftp/
sftp> put reward-innovation-1.0.0.1-SNAPSHOT.jar
Uploading reward-innovation-1.0.0.1-SNAPSHOT.jar to /upload/jlwz/testsftp/reward-innovation-1.0.0.1 -SNAPSHOT.jar
reward-innovation-1.0.0.1-SNAPSHOT.jar 100% 221MB 1.8MB/s 02:02 s
sftp>

spring占位符打印日志

1
2
3
4
5
try{
int zero = 2/0;
}catch (Exception e){
log.error("测试占位符打印日志,{},{}",null,b,e);
}

1、前面的参数必须和占位符一一对应。
2、最后面参数是异常信息可以打印,非异常信息不会打印。
3、占位符的值可以为null。

Linux复制文件夹下面的所有文件到另一个文件夹

1
cp -r 当前路径/* 目标路径

注意:目标路径必须先存在。
例如:

1
cp -r /home/award_dev/nginx-1.20.2/conf/* /usr/local/nginx/conf

Nginx指定安装位置

默认位置是/usr/local/nginx,需要进入nginx-1.20.2目录后执行下面的命令
./configure --prefix=/home/award_dev/nginx
参考链接

Nginx安装步骤

参考链接

Linux查看端口

1
netstat -anp | grep 8888

SpringBoot+Vue.js前后端分离实现大文件分块上传

参考链接

Java 8 Predicate

参考链接

SpringCloud读取配置中心配置

需要引入下面的依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- bootstrap依赖,加载bootstrap.yml-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

客户端添加spring-cloud-starter-config依赖后 会默认最高优先级读取(即使bootstrap.yml不配置)localhost:8888链接下的application.yml配置。
具体可以通过http://10.12.7.182:8888/应用名(对应bootstrap引导文件中的config.name配置)/profile 访问查看读取的配置 例如:http://10.12.7.182:8888/webbas32-gateway-v1/dev
或者直接访问文件 http://10.12.7.182:8888/webbas32-application-gateway-v1-dev.yml
spring-cloud-starter-bootstrap依赖非必须
参考链接

SpringBoot的jasypt加解密

StringEncryptor类中有加解密方法
配置文件配置ENC(“密文”)后,@Value注解可以自动解密
参考链接1参考链接2