<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AAA821的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AAA821</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AAA821]]></copyright><item><title><![CDATA[ThreadLocal，InheritableThreadLocal，TransmittableThreadLocal]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/130080274</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/130080274</guid><author>AAA821</author><pubDate>Tue, 11 Apr 2023 14:22:15 +0800</pubDate><description><![CDATA[InheritableThreadLocal 在new Thread的时候，会把ThreadLocalMap放到新线程中，完成上下文的传递，但遇到线程池，线程没有回收，而是继续复用的时候，还是拿不到线程上下文。TransmittableThreadLocal是阿里开源的组件，用于解决线程池线程复用时的上下文传递问题。ThreadLocal 新线程无法拥有拿到旧线程的上下文。]]></description><category></category></item><item><title><![CDATA[Spring源码阅读＜二＞ spring-boot-redis]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/128309213</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/128309213</guid><author>AAA821</author><pubDate>Sun, 25 Dec 2022 17:14:30 +0800</pubDate><description><![CDATA[无]]></description><category></category></item><item><title><![CDATA[使用@Data编译报不允许使用‘空’类型的问题排查]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/123431110</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/123431110</guid><author>AAA821</author><pubDate>Fri, 11 Mar 2022 18:15:28 +0800</pubDate><description><![CDATA[上伪代码


@Data
public class Test {
    private int age;
    private String name;

    public void getName() {
        if (age == 1) {
            XXXXXX
        }
    }

}

原因是有个变量，假设名为name;

然后刚好我有个getName()方法是实现了自定义逻辑的(只是方法名刚好一样），且返回值为void

这个getName方法就会与@]]></description><category></category></item><item><title><![CDATA[linux使用多个不同版本JDK并切换]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/123224877</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/123224877</guid><author>AAA821</author><pubDate>Wed, 02 Mar 2022 10:57:28 +0800</pubDate><description><![CDATA[1.不同版本JDK下载地址,直接下载x64.tar.gz解压即可用，不需要安装https://www.oracle.com/java/technologies/downloads/archive/



2.修改/etc/profile


export JAVA_HOME=/opt/jdk
export JRE_HOME=/opt/jdk/jre
#export JAVA_HOME=/usr/local/jdk707/jdk1.7.0_07
#export JRE_HOME=/usr/local/jdk.]]></description><category></category></item><item><title><![CDATA[使用Druid配置密码加解密]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/123201527</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/123201527</guid><author>AAA821</author><pubDate>Tue, 01 Mar 2022 11:25:46 +0800</pubDate><description><![CDATA[1.引进Druid包

2.对密码进行加密


public static void main(String[] args) throws Exception{
        String[] arr = ConfigTools.genKeyPair(512);
        System.out.println("privateKey:"+arr[0]);
        System.out.println("publicKey:"+arr[1]);
        String encryptSt]]></description><category></category></item><item><title><![CDATA[Waiting for table flush及Waiting for table metadata lock重现及解决]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/121360633</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/121360633</guid><author>AAA821</author><pubDate>Tue, 16 Nov 2021 17:17:29 +0800</pubDate><description><![CDATA[背景：线上的从库突然查询非常慢，一直在等待，查不出来。看执行线程列表有大量的Waiting for table flush

猜测原因：

 1.运维使用alter在主库上进行大表数据的切表

 2.大数据部门在从库通过datax同步数据到数据仓库。

早上报Waiting for table flush，有可能是主库先rename成功，然后主库切表成，主从同步到从库的时候，因为从库有慢查询，所以从库报Waiting for table flush

重现步骤：

  1.先用一个线程查表然后长...]]></description><category></category></item><item><title><![CDATA[RocketMQ.MQClientInstance和close the connection to remote address解决]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/121360011</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/121360011</guid><author>AAA821</author><pubDate>Tue, 16 Nov 2021 17:09:36 +0800</pubDate><description><![CDATA[因为业务需要，所以项目需要发消息到两个不同NameServerAddr的RocketMQ

第一个Rocketmq是直接用springboot-rocketmq

第二个Rocketmq是封装了一下，手动创建DefaultMQProduct的

试着发送了消息，两个都显示SEND_OK

但发现消息都跑到了同一个RocketMQ上。

后来看了下源码，发现原因是用了同一个MQClientInstance。

MQClientInstance通过MQClientManager获取得到，MQClientMana]]></description><category></category></item><item><title><![CDATA[Float累加，精度引起误差 符号位指数位尾数位]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/120564358</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/120564358</guid><author>AAA821</author><pubDate>Thu, 30 Sep 2021 14:14:50 +0800</pubDate><description><![CDATA[程序用float累加订单的金额，得出来的数跟在数据库查出的总数不一致。后面换成Double



下面内容转自浮点数float累加误差分析与解决_zhrh0096的专栏-优快云博客​​​​​​

由上图可知(摘在[2])， 浮点数由： 符号位 + 指数位 + 尾数部分， 三部分组成。由于机器中都是由二进制存储的，那么一个10进制的小数如何表示成二进制。例如: 8.25转成二进制为1000.01, 这是因为 1000.01 = 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0 + 0*2^-1 .]]></description><category></category></item><item><title><![CDATA[Tomcat版本大于7.0.72引起get请求400问题]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/120432510</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/120432510</guid><author>AAA821</author><pubDate>Thu, 23 Sep 2021 12:16:01 +0800</pubDate><description><![CDATA[刚才收到运营反馈说，公安部认证有问题，去看了日志，是请求认证中心报了400。
认证中心有4台服务器，两台IDC，两台腾迅云服务器
公安部认证，会去请求腾迅的公安部认证接口。
定位到是两台腾迅云服务器才会请求报400，通过本地请求同个项目的公安部认证和中宣认证，都会报400，所以排除腾迅云-公安部认证接口出问题
跟运维沟通，两台腾迅云服务器的tomcat版本是7.0.100,因为tomcat在7.0.73就已经添加了RFC3986，所以导致get请求上携带了认证姓名有中文编码，所以直接返回400了。
...]]></description><category></category></item><item><title><![CDATA[Feign跨服务调用导出文件,浏览器没有自动下载文件问题解决]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/120364614</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/120364614</guid><author>AAA821</author><pubDate>Sat, 18 Sep 2021 11:59:41 +0800</pubDate><description><![CDATA[前端请求到B服务，B服务使用feign去调用A服务是输出流，这个时候A服务就需要将输出流响应到feign接口中的response上，B服务再拿到feign接口的response，在B服务这里将response以流的方式输到浏览器​；
feign在这里将相当于一个中间人先拿到输出流中转一下。

如果feign接口这里不定义返回值的话并不会抛异常只是不能正常输出到浏览器​，也看不出什么问题​。

1.A服务(文件服务，提供导出方法)


void exportExcel(HttpServletResponse ]]></description><category></category></item><item><title><![CDATA[基于Docker搭建Canal]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/119421421</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/119421421</guid><author>AAA821</author><pubDate>Thu, 05 Aug 2021 19:58:40 +0800</pubDate><description><![CDATA[首先用yuminstalldocker在Linux搭建Docker

然后设置子网


docker network create --subnet=192.168.0.0/16 canalNetWork

子网作用：创建网络时使用--subnet 选项。 如果未指定--subnet 则Docker daemon会自动为网络选择并分配子网，这可能会导致与您基础结构中的另一个子网（该子网不受--subnet 管理）重叠。 当容器连接到该网络时，这种重叠可能导致连接问题或故障。

然后创建容器

docke..]]></description><category></category></item><item><title><![CDATA[(转)基于Docker搭建RocketMQ]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/119423659</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/119423659</guid><author>AAA821</author><pubDate>Thu, 05 Aug 2021 19:33:19 +0800</pubDate><description><![CDATA[部分内容出自：https://blog.youkuaiyun.com/fenglibing/article/details/92378090

首先在https://hub.docker.com/这里搜索镜像有哪些版本可以用

然后下载镜像


docker pull foxiswho/rocketmq:4.8.0

然后启动RocketMQServer（目录/home/rocketmq/rocketmq-4.8.0)


docker run -itd -p 9876:9876 --name rocketMQServ]]></description><category></category></item><item><title><![CDATA[Log4j日志文件没有日志问题解决]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/119322504</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/119322504</guid><author>AAA821</author><pubDate>Mon, 02 Aug 2021 12:14:11 +0800</pubDate><description><![CDATA[现象：

tomcat启动后，登录日志都显示在tomcat的catalina.out里，没有打印在对应的项目的日志文件里



配置文件 ：


logFilePath=/data/logs/Login-Interface/log.txt

log4j.rootLogger=DEBUG,A1

log4j.logger.com.mchange=ERROR,A2
log4j.logger.org=ERROR,A2
log4j.logger.httpclient.wire=ERROR,A2 
log4j.log]]></description><category></category></item><item><title><![CDATA[基于Docker实现OpenResty连接Redis]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/118400228</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/118400228</guid><author>AAA821</author><pubDate>Thu, 01 Jul 2021 23:55:45 +0800</pubDate><description><![CDATA[搭建Redis

#它会自动下载redis最新版本的镜像
docker pull redis

#根据镜像创建容器，绑定宿主机6379端口用于外网访问容器的redis
docker run -itd --name redis-test -p 6379:6379 redis

#进入容器
docker exec -it redis-test bash

#进入redis
redis-cli

搭建OpenResty

#下载openresty镜像
docker pull sevenyuan/openresty]]></description><category></category></item><item><title><![CDATA[(转)基于Docker搭建Hadoop+Hive]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/118280004</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/118280004</guid><author>AAA821</author><pubDate>Sun, 27 Jun 2021 21:09:53 +0800</pubDate><description><![CDATA[本次使用的各版本配置如下：

Docker 19.03.8
	JDK 1.8
	Hadoop 3.2.0
	Hive 3.1.2
	mysql 8.0.1
	mysql-connector-java-5.1.49.jar
	hive_jdbc_2.5.15.1040
Hadoop部分：

一、拉取镜像


docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base

二、运行容器

进入容器看worker里面有三台机子，分别是M]]></description><category></category></item><item><title><![CDATA[hadoop的SecondaryNameNode]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/117906367</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/117906367</guid><author>AAA821</author><pubDate>Mon, 14 Jun 2021 16:34:12 +0800</pubDate><description><![CDATA[辅助NameNode管理元数据，从可用性的角度出发，不会跟nameNode部署在同一服务器

执行过程：从NameNode上下载元数据信息（fsimage,edits），然后把二者合并，生成新的fsimage，在本地保存，并将其推送到NameNode，替换旧的fsimage.
...]]></description><category></category></item><item><title><![CDATA[docker安装hadoop集群遇到的一些问题]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/117879415</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/117879415</guid><author>AAA821</author><pubDate>Mon, 14 Jun 2021 15:48:46 +0800</pubDate><description><![CDATA[1.进入hadoop镜像对应的容器内，执行Hdfs命令，显示没找到hdfs: command not found

解决方案：在/etc/profile文件内

原来是export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

改成export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
...]]></description><category></category></item><item><title><![CDATA[用到的Hadoop的命令]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/117882397</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/117882397</guid><author>AAA821</author><pubDate>Mon, 14 Jun 2021 15:41:13 +0800</pubDate><description><![CDATA[1.hadoop namenode -format

格式化HDFS

2.



haddop的start-all.sh命
]]></description><category></category></item><item><title><![CDATA[(转)Hadoop的nameNode]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/117898886</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/117898886</guid><author>AAA821</author><pubDate>Mon, 14 Jun 2021 15:40:03 +0800</pubDate><description><![CDATA[以下大部分内容转自:https://blog.youkuaiyun.com/weixin_45324890/article/details/108593297

和https://www.cnblogs.com/cicada-smile/p/13801180.html


]]></description><category></category></item><item><title><![CDATA[(转)hadoop的datanodes]]></title><link>https://blog.youkuaiyun.com/AAA821/article/details/117898471</link><guid>https://blog.youkuaiyun.com/AAA821/article/details/117898471</guid><author>AAA821</author><pubDate>Mon, 14 Jun 2021 10:50:55 +0800</pubDate><description><![CDATA[转自https://blog.youkuaiyun.com/cicada_smile/article/details/109180161
]]></description><category></category></item></channel></rss>