java积累

精彩博文

 

 

 

 

 

 

一、常用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注入静态变量

  1. 类要交给spring管理
  2. @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

8ca2ab31dfecfd0a47d17afbcc1365d8.png

 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.合并之前的提交代码到另一分支

3111472049441ef5e7da31246eb982cd.png

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

f36b492e2dbd73d2fc5fad7df6115bfe.png

86a861f8c556fdc667024d071823b913.png

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值