java:

流的使用:

  1. 需求:将得到的对象List 根据某一属性进行分组(例如你需要根据分别对产品id的每种情况进行讨论)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 // 用于存储从每条记录中得到的有效信息
@Data
public class InfoDTO {
private Long equipmentId;
private Boolean isSuccess;
private Date actingTime;

public InfoDTO(Long equipmentId, Date actingTime) {
this.equipmentId = equipmentId;
this.actingTime = actingTime;
}

public InfoDTO() {
}
}


ArrayList<InfoDTO> successInfo = new ArrayList<>();
//填充successInfo,此处省略
Map<Long,List<InfoDTO>> groupedList = successInfo.stream().collect(Collectors.groupingBy(InfoDTO::getEquipmentId));

Map中,值的自增、自减操作的简单写法:

应用场景:查询Map中的某一key值,如果有就+1,如果没有就put进value = 1

🐌原本的写法:判断是否存在key,如果存在则取出value, + 1后再put回去;如果没有就put(key,1)进入

现在:

1
map.put("你要找的key", map.getOrDefault("你要找的key", 0) + 1);

将本地代码打jar包上传服务器并测试运行:

1.将本地项目代码打jar包(idea中)

  • Command + ; 打开项目结构界面,创建jar包

image-20231215140746859

  • 进入页面后,选择需要创建jar包的主类,点击确定后再应用
image-20231215141013951
  • 之后再根据需要构建工件即可在生成目录中得到jar包
image-20231215141350692 image-20231215141517041

2.将jar包上传到服务器指定目录

  • 使用sftp与服务器建立连接,使用put方法将本地jar包上传至服务器
1
put localfilepath remotefilepath

3.在服务器对应目录运行jar包进行测试

1
java -jar xxxx.jar

数据库:

动态查询:

需求:

​ 有许多同类型的表(表名前缀相同,都是类似于xxxx202209 –> 公共前缀+年月信息),由于数据量庞大按月份分成了多张表,我们需要根据前端请求中携带的年月信息去查询不同的表

实现方案:

​ 使用拦截器,(按照我目前的理解。。)对数据库查询语句进行拦截,当查询表名为公共前缀时,就获取请求头传来的日期信息,凭借成完整的表名,去对应的表中查询!

示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package com.xxx.springbootinit.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Map;

/**
* @author miemie
* @since 2018-08-10
*/
@Configuration
@MapperScan("com.nrec.springbootinit.mapper")
public class MybatisPlusConfig {

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
if("这里填哪些相同结构表名的公共前缀".equals(tableName)) {
//这里,我在controller中,用户请求时,就将date信息存放在请求参数传递辅助类的 map 中,因此在这里可以获取
String dateSuf = RequestDataHelper.getRequestData("date");
return "公共前缀" + dateSuf;
}else {
//如果不是我要查询的表,那么就还是按原来的表名查询
return tableName;
}
});
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
return interceptor;
}
}







package com.xxx.springbootinit.config;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import java.util.Map;

/**
* 请求参数传递辅助类
*/
public class RequestDataHelper {
/**
* 请求参数存取
*/
private static final ThreadLocal<Map<String, Object>> REQUEST_DATA = new ThreadLocal<>();

/**
* 设置请求参数
*
* @param requestData 请求参数 MAP 对象
*/
public static void setRequestData(Map<String, Object> requestData) {
REQUEST_DATA.set(requestData);
}

/**
* 获取请求参数
*
* @param param 请求参数
* @return 请求参数 MAP 对象
*/
public static <T> T getRequestData(String param) {
Map<String, Object> dataMap = getRequestData();
if (CollectionUtils.isNotEmpty(dataMap)) {
return (T) dataMap.get(param);
}
return null;
}

/**
* 获取请求参数
*
* @return 请求参数 MAP 对象
*/
public static Map<String, Object> getRequestData() {
return REQUEST_DATA.get();
}
}



//controller层示例接口:
@GetMapping("/query")
public ResultDTO query(@RequestParam("date")String date){
RequestDataHelper.setRequestData(new HashMap<String, Object>() {{
put("date", date);}});
//继续写业务。。。
}

Linux:

xxx(用户名) 不在 sudoers文件中,此事将被报告 解决方案

执行sudo时提示“XXX 不在sudoers文件中,此事将被报告”

解释:sudo命令可以让你以root身份执行命令,来完成一些我们这个账号完成不了的任务。但是并非所有用户都能够执行sudo,因为有权限的用户都在/etc/sudoers中。

解决方案:

image-20231215161542383