精彩博文
- 链接: Java 高级 .
- 链接: Java 日常工具类 .
- 链接: 尚硅谷视频redis笔记 (github 多种笔记).
- 链接: Java 全栈知识体系.
- 链接: excel生成模板
一、常用api
1.查看容器中有没有某个id,有为true
.contains(long id)
2.生成随机数值
Math.random
3.把a对象数据放进b对象里 字段名称要相同
BeanUtils.copyProperties(实体类 a,实体类 b)
4.集合类判空
CollectionUtils.isNotEmpty(集合)
5.只能用在单数据源回滚
@Transactional (rollbackFor = Exception.class)
6.多数据源 指定数据源
@DS()
7.可变参数 A...a(是个数组)
ArrayUtils.isNotEmpty(a)?a[0]:new A();
8.截取取字符串
StringUtils.abbreviate(" ",15) 取前15位
StringUtils.abbreviate(" ",5,15) 取,5-15位
9.Date 增加一天
DateUtils.addDays(date, 1);
10.获取固定格式时间DATE
public Date getNowTime() {
Date date = new Date();
Date nowDate = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(date);
try {
nowDate = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return nowDate;
}
11.lambda表达式所在的作用域生命的变量不可以第二次赋值
12. jsonObject
// string 转 jsonObject
JsonObject.parseObject("string")
// 拿到key下的json数组(jo是jsonObject)
JsonArray as = jo.getJsonArray("key")
// 拿到as下的第二个数组
JsonArray as = as.getJsonArray(2)
// json转string
string properties = a.getJsonObject("jo").toString;
// json转实体类
Entity e = JSON.parseObject(jo, Entity.class);
14. 向前端传的字段名与数据库字段名无法一致。例:数据库字段‘lBoundary’,前端需要‘lboundary’
在get,set方法上使用注解@JsonProperty(‘lboundary’)
15.浮点数比较大小要比较精度(1e-6等于0.000001)
// 18.1 比较相等时,精度要<=1e-6
fabs(a-b)<= 1e-6
// 18.2 比较大于时
if(a>b && fabs(a-b)> 1e-6)
// 18.3 比较小于时
if(a<b && fabs(a-b)> 1e-6)
16.string拼接“\”符号时,不能写死,因为不同系统分隔符不同,要使用File.separator替换
File.separator
17.为某个值赋最小值
Double.NEGATIVE_INFINITY;
18.@Autowired 循环依赖时使用懒加载@Lazy
19.定时任务
@Scheduled(cron = “000**?”)
方法......
20.Math.max(a,b) 比较出a,b中的max,比较float性能差
21.指定字符删除(替换掉_)
str.replaceAll("_","")
22.懒汉模式 双检锁模式
/**
* 懒汉模式
* volatile 防止指令重排序
*/
private static volatile AsyncManager instance = null;
public static synchronized AsyncManager getInstance() {
//双检锁模式
if(null == instance){
synchronized (AsyncManager.class) {
if(null == instance) {
instance = new AsyncManager();
}
}
}
return instance;
}
23.用到.in(ids),或者sql中有in(ids)时,要对ids做判空处理
24.map.putIfAbsent:map的此方法是先检查map中是否有key,没有时候再添加
25.将大list转换成小list
List<List<String>> minList = Lists.partition(maxList, 1000);
26.spring的@value注解是spring初始化bean时候执行的。
如果用@value对static修饰的属性复制(static先于spring之前加载)
做法:先封装一个bean来初始化相关的配置,然后利用工具类在静态代码块中获取到这个bean对象,用这个bean对象来初始化工具类中的相关属性
//https://www.jianshu.com/p/3daeb8629a56
// https://blog.csdn.net/yrsg666/article/details/111640131
@value使用时默认加载application.yml中的文件,可以再指定别的文件spring.porfiles.active=dev\alpha\beta
27.sleep的另一种写法
TimeUnit.MILLISECONDS.sleep(300);
28.文本框校验先转成Document
Document document = Jsoup.parse(content);
// 判空
ObjectUtil.isEmpty(document.text())
29.判断集合中某值出现的次数
//Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数。
HashBag<String> bagNo = new HashBag<>("1")
30.常用json格式
{
"smsCode": "SMSTM1661328097363",
"map": {
"payrollName": "中银金科",
"successCount": "1",
"failCount": "3"
},
"list": [
"18587654434",
"18587654341"
],
"listEntity": [
{
"rsId": "",
"taxAtm": "30.0"
},
{
"rsId": "",
"taxAtm": "60.0"
}
],
"appKey": "message"
}
31.配置文件获取参数
- 1.单个参数
@Value(value= "${sms.jinke.appKey}")
private String AppKey ;
- 2.实体类参数
// 必要的三个参数
@Component
@Data
// 主要枚举
@ConfigurationProperties(prefix = "sms.jinke")
// 具体的对应的三个获取的数据
public class ErpSmsSecret implements Serializable {
private static final long serialVersionUID = 1L;
private String appKey;
private String appSecret;
private String signature;
}
** 获取参数的时候不能new这个类,要用@Resources注解
32.跳出循环
return:跳出方法
continue:跳出本次循环
break:跳出循环
33.新项目@NotBlank注解不起作用
引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
34. 问:字符串有长度限制吗?是多少?
答:首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,
且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码
中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数
组的最大长度可以使【0~2^31】通过计算是大概4GB。
35. 问题:hutoolhttp调用post,发送短信,但是短信乱码! 解决:指定字符集 .charset("GBK")
String rsp = HttpRequest.post(url).contentType("application/x-www-form-urlencoded;charset=GBK").charset("GBK")
.form(map).execute().body();
36. 启动类中测试某方法
//启动类
run()....;
//引入类
TestService testService = SpringUtil.getBean("testService");
testService.test();
37. @RequestPart
@RequestPart
这个注解用在multipart/form-data
表单提交请求的方法上。- 支持的请求方法的方式
MultipartFile
38.实体类中set属性为集合
实体类中set集合属性时,指向的的是集合的地址,如果后续集合有变化会是此集合属性变化
39.gson转换实体类对象
Model model = new Gson().fromJson(str, Model.class);
39.gson转换list<实体类>对象
List<Model> models = new Gson().fromJson(str, new TypeToken<List<Model>>(){}.getType());
40.首字母变大写
char[] chars = propertyPath.toCharArray();
chars[0] -= 32;
41.JPA动态sql
//创建查询条件数据对象
Customer customer = new Customer();
customer.setName("Jack");
customer.setAddress("上海");
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withMatcher("name", GenericPropertyMatchers.startsWith()) //姓名采用“开始匹配”的方式查询
.withIgnorePaths("focus"); //忽略属性:是否关注。因为是基本类型,需要忽略掉
//创建实例
Example<Customer> ex = Example.of(customer, matcher);
//查询
List<Customer> ls = dao.findAll(ex);
42.深拷贝
SerializationUtils.clone(obj)
43.新项目中可以启动项目,但是postman调用报404。
启动类和controller所在包在同一级,启动类(不加scan注解)扫描包只能扫描到本包和子包。
44.Feign接口调用,在有注解@FeignClient(...)之外,还要在启动类上添加注解@EnableFeignClients(…)扫描到这个feign接口
45.feign接口传递时,要保证参数传递过去,而@valid并不能做传递,所以只是用@valid会报错。可以使用@ResquestBody @PathVariable注解
46.@value注入静态变量
- 类要交给spring管理
- @Value 标记在 set 方法上,方法名没有要求
@Component
public class TestConfig {
private static String name;
@Value("${test.name}")
public void inject(String s) {
name = s;
}
}
47.以流的形式返回下载的文件,在controller层就不要return别的东西了
48.输入输出流
byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
IOUtils.copy(inputStream, outputStream).
49.事务注解中的错误类型是追加,runTimeException一定会事务回滚的,如果追加checkException则两者都会事务回滚
50.手动引入bean,根据配置选择注入1.@ConditionalOnProperty(prefix="配置前缀",name="配置名"'havingValue="true",matchIfMissing=false) 2.resources配置文件\META-INF\spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com......类的存储位置和名字
51.单元测试 mockito
1.注入yml属性
ReflectionTestUtils.setField(当前类,属性名,属性值)
2.mock any方法
when(mockDAO.方法名(any(xxx.class),eq(str))).thenReturn(返回值)
3.mock无返回类型方法
doNothing().when.(类).方法
二、postgre数据
1. 4326转3857坐标系之前先要配置默认坐标系
select update Geometry SRID(“表名”,‘geom’,4326)
2. 查询坐标系
select ST_SRID(geom) from ”表名“ limit 1
3. 快速创建两个点
ST_MakePoint(x,y)
4. 更新坐标系
ST_setSrid(XX,4326)
5. 坐标系之间转换
ST_Transform(4326,3857)
6.JPA+ pgsql 手写实现分页
@Query(nativeQuery = true
,value = "select u.id,user.name,g.goodsName from user u left join goods g on g.user_id = u.id where g.name=:#{#criteria.goodsName}"
, countQuery = "select count(u.id) from user u left join goods g on g.user_id = u.id where g.name=:#{#criteria.goodsName}")
Page<实体类> queryUser(@Param("criteria") QueryCriteria criteria, @Param("pageable") Pageable pageable);
jpa需要List<Map<String,Objrct>> 接参
where 1=1 and if(:#{#criteria.name !='',g.name=:#{#criteria.goodsName},1=1)
可动态传入参数。上面是Mysql
pgsql没有if()函数,但是可以用case when :str is null than 1=1 else t.aa=:str end
data type 问题可以增加cast(:type as text)来指定字符类型
7.字符串拼接
语法:string || string
例子:
SQL:select 'Post' || 'greSQL'
结果:PostgreSQL
7.json
pgsql有json数据类型可以使用,方便对象放进数据库
三、mysql数据库
1. 数据库全局查询
ctrl +F
2. 全文索引
MATCH (columnName) AGAINST (‘string’)
SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聪')
3. concat()函数
将多个字符串连接成一个字符串,如果有任何一个参数为null,则返回值为null
concat(str1, str2,...)
4. <![CDATA[ ]]> 防止特殊字符被转义
<![CDATA[<=]]>
5. 根据UNIQUE索引或者primary key(主键)是否出现重复,判断执行update语句或者insert语句
INSERT INTO user(id,name) VALUES(8,'c')
ON DUPLICATE KEY
UPDATE name="B";
6. mybatis-plus中IserviceImpl中的saveOrUpdateBetch()方法也可以批量实现存在 id 时候覆盖,不存在时候添加
7. 校验数据库某列字段是否唯一,使用limit 1可以避免全表查询
limit 1
8. 查询时候用到or时候使用union替换,因为or会使索引失效
9. 如果某个字段为null就从别处拿取字段值
CASE WHEN tm.createTime IS NULL
THEN
( SELECT create_time FROM t_merchant_information t WHERE t.id = tm.id )
ELSE
tm.createTime
END as createTime
10. sql中当前时间与数据库数据比较
where date_format(now(), '%Y%m%d%H%i%S') <![CDATA[>=]]> concat(date_format(t1.begin_date, '%Y%m%d'), t1.begin_time)
11. 数据库一对多,并且要展示某个字段时候可以用GROUP_CONCAT方法拼接字段。
(select GROUP_CONCAT(sys_name separator',') from t_news_module where news_id = tn.news_id)
SELECT
tn.*,
(select GROUP_CONCAT(sys_name separator',') from t_news_module where news_id =
tn.news_id) as sys_name
FROM
`t_news_notifications` tn
where
tn.del_flag = 2
12. 使用foreach时要记得separator是“,”号
<foreach collection="list" item="item" index="index" separator=",">
13. 数据库表中id自增时候普通删除,id会顺序增加,执行truncate table t_name 后数据做删除处理,并且id从1开始自增
truncate table t_name;
14. 返回字符串str,使用在开始位置pos和len个字符的的字符串,newstr取代长字符串
INSERT(str,pos,len,newstr)
15. 数据库在指定字段后增加某字段
ALTER TABLE t_table ADD module INT ( 10 ) NOT NULL COMMENT '标记' after sms_id;
16.建表基本语句
DROP TABLE IF EXISTS `t_bank_appid`;
CREATE TABLE `t_bank_appid` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键',
`app_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '小程序名称',
`appid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序id',
`organ_no` int(10) NOT NULL COMMENT '机构号',
`organ_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '机构名',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '备注',
`status` int(10) NOT NULL DEFAULT 0 COMMENT '状态,0-无效,1-生效',
`is_delete` int(3) NOT NULL DEFAULT 0 COMMENT '是否删除,0-删除,1-正常',
`created_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人',
`created_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`updated_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '最近一次更新人',
`updated_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `appid`(`appid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '分行的小程序appid信息' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
17.<if>的使用
status值为0,直接跳出if不执行,是因为加了 != '’,正确
<if test="param.status != null">
18.查询大于N天的数据
SELECT DATE_ADD(NOW(),INTERVAL -15 DAY)
19. substr
SELECT SUBSTR(create_time,1,10) FROM t_tab
SELECT create_time FROM t_tab
+-------------------------+
+ SUBSTR(create_time,1,10)+
+-------------------------+
+ 2022-09-23 00:00:00 +
+-------------------------+
+-------------------------+
+ create_time +
+-------------------------+
+ 2022-09-23 +
+-------------------------+
20.辅助列 增加列号 row_number() OVER(PARTITION BY userId ORDER BY a_createdTime)
-- 根据id排序
select userId, a_createdTime, row_number() OVER(PARTITION BY userId ORDER BY a_createdTime) a_rk
from t_tab
21.关联表中没有主键,但是可以设置两个(多个)字段保持主键属性,保证唯一性
PRIMARY KEY (`m_id`, `a_id`) USING BTREE
22. 单独修改某字段的字符长度
alter table t_sms_channel modify column channel_pwd varchar(255);
23. inner join 和left join
没特殊要求时候尽量使用inner join 因为left join 以大表为主时候
可能会使部分数值为null,而且这两种join 效率差别不大,并inner join更快些
SELECT
tp.id,
td.bank_card
FROM
`t_payroll` tp
LEFT JOIN t_payroll_detail td ON tp.batch_no = td.batch_no
WHERE
tp.merchant_no IN ( 'B1627456486985', 'B1634863970562' )
> OK
> 时间: 51.679s
SELECT
tp.id,
td.bank_card
FROM
`t_payroll` tp
INNER JOIN t_payroll_detail td ON tp.batch_no = td.batch_no
WHERE
tp.merchant_no IN ( 'B1627456486985', 'B1634863970562' )
> OK
> 时间: 45.965s
四、idea功能
1. 快速创建静态常量
ctrl+alt+c
2. 快速大小写转换
ctrl+shift+u
3. 中英文翻译
ctrl+shift+o
4. 快速给实体类添加get,set方法
alt+ent(在实体类上添加)
5. 格式化代码
ctrl+alt+t
6. idea项目中没有iml文件
执行mvn idea:module
7. idea打开新项目设置
idea左上角的 File 菜单 ----> New Projects Settings ----> Settings for New Projects...
8.git Rebase失败还原
idea 先到rebase abort
9.IDEA的Terminal执行maven clean install 并放过测试类
先把maven加入环境,到bin层
再执行 mvn clean install package '-Dmaven.test.skip=true'
10.合并之前的提交代码到另一分支
11.debug启动太慢可以尝试先置灰debug点
12.git更改ip git>manage remotes>更改
13.创建并跑起来一个简单地springboot项目
// 1.在maven引入spring-starter就可以启动
// 2.启动类上只有@SpringBootApplication就可以启动项目
// 3.规定端口号server.port
14.git报错:Сannot Run Git\n Cannot identify version of git executable: no response
15.新建的项目打包有问题可以加入maven依赖
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
16.启动main方法时候,报找不到某些类(NoClassDefFoundError)可以尝试以下操作
下拉main所在方法=》edit configurations=》modify options =》Add dependencies with “private”scope to classpath
17.ctrl+alt+h 查看方法被调用的路径
五、linux
1.linux 查看日志常用命令
tail:
-n 是显示行号;相当于nl命令;例子如下:
tail -100f test.log 实时监控100行日志
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
cat -n test.log |grep "debug" 查询关键字的日志
2.按行号查看---过滤出关键字附近的日志
1)cat -n test.log |grep "debug" 得到关键日志的行号
2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
cat app.log | grep -C 5 '关键字' (显示日志里匹配字串那行以及前后5行)
cat app.log | grep -B 5 '关键字' (显示匹配字串及前5行)
cat app.log | grep -A 5 '关键字' (显示匹配字串及后5行)
3.根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;
先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点
4.进入编辑查找:vi(vim)
1、进入vim编辑模式:vi app.log
2、输入“/关键字”,按enter键查找
3、查找下一个,按“n”即可( n 查找上一处错误日志 N 查找下一处错误日志)
4、ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滚动一行。
ctrl+y: 向上滚动一行。
5、ctrl+o回到搜索的地方
:w - 保存文件,不退出 vim
:w file -将修改另外保存到 file 中,不退出 vim
:w! -强制保存,不退出 vim
:wq -保存文件,退出 vim
:wq! -强制保存文件,退出 vim
:q -不保存文件,退出 vim
:q! -不保存文件,强制退出 vim
:e! -放弃所有修改,从上次保存文件开始再编辑
其他情况:
/关键字 注:正向查找,按n键把光标移动到下一个符合条件的地方
?关键字 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的
5.查看所有关键字相关的日志(more 和vi 类似)
more app.log 默认打开所有的,从前往后
常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)
1、more app.log | grep '关键字'
2、按Space键:显示文本的下一屏内容
3、按B键:显示上一屏内容;
4、按H键:显示帮助屏,该屏上有相关的帮助信息;
6.linux启动jar包
启动 jar 包
1.打成 jar
2.放进环境
3.nohup java - jar redis _ cache -1.0- SNAPSHOT . jar > output . log 2>&1
7.linux重启jar包
重启 jar 包
1.查询启动的进程 ps - elf | grep java (查看进程的 pid : ps aux | grep redis _ ca )2.找到进程的 pid
3.杀死进程 kill -9 xxxx
4.启动 jar 包
8.linux查看进程是否正常(端口号)
lsof -i:9200
9.linux查看进程是否正常(查询)
lsof -i:ps -ef |grep 'elasticsearch'
10.linux运行es
cd到bin
执行 ./elasticsearch
11.linux后台运行es
cd到bin
执行 ./elasticsearch -d
12.查看文件容量占比
df -h
13.查看文件夹文件大小
du -sh *
14.查看压缩文件日志
zcat *.gz |grep aaa -C10
15.查看es占用内存,堆内存信息
ps -aux |grep elasticsearch
初始堆内存 xms和最大堆内存 xmx 是开始时就划分的,所以所占用的内存是两者加和。总的占用内存还要加上meta元数据区()
top
free
16.清除缓存
sync; echo 3 > /proc/sys/vm/drop_caches # 清空页面缓存
sync; echo 1 > /proc/sys/vm/drop_caches # 清空目录项缓存
sync; echo 2 > /proc/sys/vm/drop_caches # 清空SLAB缓存
sync; echo 3 > /proc/sys/vm/drop_caches # 清空所有缓存
17.linux kafka 消费数据
bin/kafka-console-consumer.sh --bootstrap-server <broker-list> --topic <topic-name> --from-beginning
<broker-list> 是Kafka集群中代理的列表,格式为host1:port,host2:port。
<topic-name> 是你想要消费消息的主题名称。
--from-beginning 参数表示从主题的最开始处读取消息,如果你想要从最新的消息开始读取,可以省略这个参数
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
18.容器化命令
进入节点
kubectl get pods -n wwww-sit (namespace)
查看某服务日志
kubectl logs -f XXXXXXXX (namespace)
进入到容器内部
kubectl exec -it xxxxxxxxxxxxxxxx sh -n wwww-sit (namespace)
重启服务
kubectl rollout restart deployment xxxx(没有后缀唯一标识) -n wwww-sit
六、SQL
SELECT
tm.merchant_no AS merchantNo,
td.NAME AS deptName,
tm.NAME AS merchantName,
tba.appid AS appId,
CASE
WHEN tm.createTime IS NULL THEN
( SELECT create_time FROM t_merchant_information t WHERE t.id = tm.id )
ELSE tm.createTime
END as createTime
FROM
(
(
SELECT
tmi.id,
tmi.merchant_no,
tf.update_time as createTime,
tmi.NAME,
tmi.dept_id
FROM
t_merchant_information_pass tmi
LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
AND tf.flow_status = 3
WHERE
tmi.del_flag = 1
AND tmi.dept_id != 1
AND tmi.id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
GROUP BY
tmi.merchant_no
) UNION
(
SELECT
tmi.id,
tmi.merchant_no,
tmi.create_time as createTime,
tmi.NAME,
tmi.dept_id
FROM
t_merchant_information tmi
LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
WHERE
tmi.del_flag = 1
AND tmi.dept_id = 1
AND tmi.id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
GROUP BY
tmi.merchant_no
)
) tm
LEFT JOIN t_bank_appid tba ON tba.organ_no = tm.dept_id
AND tba.is_delete = 1
AND tba.STATUS = 1
AND tba.organ_no != 1
LEFT JOIN t_dept td ON td.id = tm.dept_id
order by tm.id desc
</if>
七、kafka:
启动kafka
nohup bin /kafka-server-start.sh config/server.properties > nohup.out 2>&1 &
配置
consumer:
maxPendingRequest:100
requestTimeOut:10000
pollInterval:1000
maxCallbackThreads:100
common:
retention.ms:604800000 数据保存时间(7天)
retention.bytes:1048576000 总日志大小(1000m)。超过删最早的
segment.bytes:2621400 segment大小(25m)
partitions:10 分区数
min.insync.replicas:1 ISR容许副本
kafka配置文件
server.properties