![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
weixin_40455124
这个作者很懒,什么都没留下…
展开
-
使用javap命令查看class 版本
在windows下使用如下命令。原创 2024-05-12 17:26:15 · 145 阅读 · 0 评论 -
控制maven 输出信息的语言
如果用java/java.exe来启动JVM,那么在命令行上使用 -Duser.country=US 就可以把国家指定为美国。用javac/javac.exe来启动javac编译器则需要再多加个-J在前面,也就是 -J-Duser.country=US。原创 2024-04-21 15:27:40 · 264 阅读 · 0 评论 -
Apache Camel Jbang的dep和classpath 及-O 简单记录
同时建议在生产环境使用-o,避免网络访问导致的安全问题,在-o模式下,deps方式需要事先做好cache,或者编辑好/jbang/.jbang/cache/dependency_cache.json文件。deps 适用于环境上有maven repository或者git 的场景,对于传统发布jar/war的模式下,classpath更适用。在Apache Camel Jbang 官网主要提到的deps的用法,classpath的较少。DEPS和CP都支持文件内或者命令行指定,文件内写法为。原创 2024-01-14 11:18:31 · 617 阅读 · 0 评论 -
RabbitMQ 笔记
确保消息在server 出现问题或者recovery能恢复: declare it as durable in the producer and consumer code.原创 2023-12-02 08:39:01 · 442 阅读 · 0 评论 -
慎用Spring Boot Project Without Starter Parent
Spring Boot Project Without Starter Parent 不仅仅dependencies编写复杂,如果有遗漏或者错误还有各种错误。今天测试liteflow就遇到各种class not found,改为with parent,秒过。原创 2023-07-20 07:04:06 · 50 阅读 · 0 评论 -
Spring Boot 与context 版本不一致导致的AbstractMethodError
2、spring boot 和spring 版本是否兼容。1、maven更新后是否reload。原创 2023-07-20 07:01:11 · 609 阅读 · 0 评论 -
使用maven profile 实现一次打包多版本依赖的fat jar
基于一种特殊情况: 需要开发通用代码,但底层依赖的jar有不同版本,使用一次maven 命令编译来同时生成多个fat jar。mvn命令 : mvn clean package -P log-v1,log-v2。log4j-v1/log4j-v2 有一个同名类被maintest引用。maintest pom.xml如下。原创 2023-07-03 21:27:21 · 846 阅读 · 0 评论 -
javaagent springboot class not found的解决思路
使用bytebuddy对springboot 应用进行instrument的时候,会原本正常的springboot 应用有class not found的情况。但经过测试发现使用appendToBootstrapClassLoaderSearch 把相关class。网上能看到基本都是说双亲机制导致的问题,有些提供了很复杂的解决方法。导入class path即可,参考代码如下。原创 2023-06-29 20:28:30 · 709 阅读 · 1 评论 -
idea output path 问题导致spring boot RequestMappingHandlerMapping 扫描到其它project的class
在做nacos测试的时候,发现consumer 运行时候RequestMappingHandlerMapping 有provider的rest 信息,检查代码及pom.xml都没有发现问题,最后发现是下图红框内的信息。不知道为啥被修改了下图的信息。修改正确后,问题解决。原创 2023-06-03 09:38:52 · 71 阅读 · 0 评论 -
jvm gc 及weakhashmap 优秀文章链接
记录一下我觉得关于jvm gc 优秀文章链接。原创 2023-02-25 07:16:40 · 52 阅读 · 0 评论 -
springbatch 并发控制及不保存数据到数据库
batch 每次run都需要获取数据库信息,因此数据库连接池会限制总的并发数量,因此高并发需要考虑好连接或者不保存到数据库。springbatch 不保存数据到数据库方式如下。原创 2023-02-11 18:07:50 · 452 阅读 · 0 评论 -
spring batch 4的两种并发模式
这种模式可以传一个ExecutionContext给不同partition,可以用于各个partition控制自己的读取,而模式一需要自行控制避免重复。startLimit为启动数量,throttleLimit为总量。这种模式多并发需要自行在代码控制每个并发处理数据不重复。分区Partitioner 代码。原创 2023-02-11 17:19:33 · 374 阅读 · 0 评论 -
使用Files.copy 实现文件合并
使用Files.copy 写入stream 实现文件合并,可以不用buffer 或者line读写,代码也简单。原创 2023-01-15 22:56:10 · 402 阅读 · 0 评论 -
spring batch JOB_INSTANCE 唯一key分析
可以发现是根据input parameter 生成md5 作为key的,因此反查job 参数,保持每个job 实例参数唯一即可,如果业务上无法保持一次,增加一个uuid作为附加参数即可。起因是BATCH_JOB_INSTANCE insert 出现dead lock 失败,insert 出现dead lock 比较少见,觉得应该是key 有问题。可以发现instance id是唯一增长,冲突的可能就是job_key。查看代码 DefaultJobKeyGenerator。原创 2023-01-15 08:37:40 · 545 阅读 · 0 评论 -
atlas 编译慎用maven.aliyun.com及cnpm
使用maven.aliyun.com 遇到jms 1.1等jar 不存在,使用cnpm 也存在package不存在的事情,改了半天,最后web出现js不存在等问题。把这两个去掉,找个网络畅顺的时间进行编译,一把就过了,什么都不用调整。atlas 2.2.0 编译过程中开始使用。原创 2022-11-02 20:39:22 · 80 阅读 · 0 评论 -
查看jvm 默认配置
注意不同操作系统、不同配置主机都可能不同。查看jvm 默认配置。原创 2022-10-30 11:43:50 · 149 阅读 · 0 评论 -
阿里Druid中使用log4j 配置的package 名称
简单记录一下阿里Druid中使用log4j 配置的package 名称,不能使用log4j里面输出的package name,而要参考。Druid中使用log4j2进行日志输出。使用druid.sql。原创 2022-10-27 20:57:27 · 136 阅读 · 0 评论 -
阿里arthas 加载类总结记录
总结使用sc检查是否已经加载使用classloader -t 查看所有classloader,估计可能要使用的classloader使用 classloader -c hashcode 查看是否负责加载class所在jar或者dirclassloader -c 5fd0d5ae -load 加载类,加载成功有提升,没有提升代表此classloader的classpath 无想加载的类。最后题外话,boot要保持只启动一次,否则会有N个ArthasClassloader出现,启动后使用 java原创 2022-04-30 12:31:14 · 744 阅读 · 0 评论 -
使用jinfo等工具时候要注意版本和JAVA_HOME一致性
jinfo等jdk tool需要注意与进程使用的版本和JAVA HOME保持一致,低版本jinfo访问高版本进程会报version 错误,而高版本访问低版本也可能失败,以下是示意信息。[app@--- arthas]$ jinfo 20603Attaching to process ID 20603, please wait...Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.r原创 2022-04-30 12:06:21 · 140 阅读 · 0 评论 -
使用mbean 自动执行heap dump
记录下如何查看mbean的使用方法和自动进行heap dump。import java.io.File;import java.lang.management.ManagementFactory;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import javax.management.InstanceNotFoundException;import javax.mana原创 2022-04-23 16:43:44 · 187 阅读 · 0 评论 -
maven-compiler-plugin release错误 、debug及fork 使用
JDK 11下release错误编译presto的遇到Caused by: org.codehaus.plexus.compiler.CompilerException: 无效的标记: --release或者Caused by: org.codehaus.plexus.compiler.CompilerException: 无效的标记: --release 1.8错误原因包括使用的jdk 是1.8 ,release 标注是jdk 9以后才支持release 需要改8,不能使用1.8De原创 2022-04-22 06:38:04 · 2388 阅读 · 0 评论 -
presto maven-dependency-plugin Skipping 原因
在对presto 0.272 进行maven 依赖分析的时候,发现presto-spark-package没有dependency 输出,默认输出内容如下:presto maven-dependency-plugin Skipping 原因[INFO] --------------< com.facebook.presto:presto-spark-package >--------------[INFO] Building presto-spark-package 0.272原创 2022-04-16 18:04:51 · 414 阅读 · 0 评论 -
JAVADOC 简单记录
今天在阅读源码的时候想使用idea 的javadoc生成doc 查看类之间的关系,结果idea 内置的tools下的javadoc 失败,研究了手工生成doc,记录一下。ps:idea的失败可能是由于module模式导致javadoc_args过大失败。最终命令:javadoc -d docs -Xmaxwarns 10 -Xmaxerrs 100 -Xdoclint:none -sourcepath . -private -d D:\temp @d:\temp\javadoc_argsjav原创 2022-03-30 07:40:07 · 619 阅读 · 0 评论 -
java FUNCTION传入返回值模式简单记录
java FUNCTION 可以适应lambda 模式直接传入返回值,这种模式下->前的参数可以是任意写,1、参数是被忽略的,无需定义2、函数调用时候,直接返回->后面的值测试代码如下package external.test;import java.util.function.Function;public class FunctionTest { static ClassLoader c; public static void main(String[] args)原创 2022-03-27 21:07:44 · 1691 阅读 · 0 评论 -
curator 2.10(elasticjob 2.x)版本部分测试代码
记录一下最近对curator 2.10(elasticjob 2.x)的一些测试。验证TreeCacheListener是否并发处理(结果为单线程顺序)@Test public void testEventConcurrentTrigger() { RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); String name = runtime.getName(); // format: "pid@hostname" S原创 2022-03-02 20:37:37 · 253 阅读 · 0 评论 -
Mark 默认构造函数对于json 与对象转换的重要性
Mark一下 默认构造函数对于json 与对象转换的重要性。今天有个对象,带有一个list 的field,可以json 序列化为字符串,但反序列化一直为空。最后发现是对象没有带默认构造函数导致的,mark一下。...原创 2022-02-27 23:08:26 · 140 阅读 · 0 评论 -
zookeeper node value最大值
zookeeper node value最大值为1M,不建议修改,具体可以参考:https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html的如下内容jute.maxbuffer:(Java system property: jute.maxbuffer)This option can only be set as a Java system property. There is no zookeeper prefix on it. It s原创 2022-02-27 09:42:24 · 1039 阅读 · 0 评论 -
zookeeper curator PathChildrenCache 分析记录
https://blog.csdn.net/hosaos/article/details/88658676对NodeCache,PathChildrenCache,TreeCache做了比较详尽的分析,但有一点没有说的很直接:于PathChildrenCache,不同的startMode:** * Method of priming cache on {@link PathChildrenCache#start(StartMode)} */ public enum Start原创 2022-02-26 11:24:20 · 912 阅读 · 0 评论 -
Curator LeaderSelector及InterProcessMutex 简单分析
Curator LeaderSelector 底层是调用InterProcessMutex 实现,可以参考以下stack信息Daemon Thread [Curator-LeaderSelector-0] (Suspended (breakpoint at line 293 in GetDataBuilderImpl)) owns: LockInternals (id=47) GetDataBuilderImpl.forPath(String) line: 293 GetDataBuilde原创 2022-02-26 00:11:07 · 232 阅读 · 0 评论 -
JDK 9 future orTimeout及completeOnTimeout 记录
future 在jdk 8 通常是通过get(long timeout, TimeUnit unit)或者使用applyToEither来控制超时。在JDK 9以后可以使用future.completeOnTimeout(status, 10 * 1000, TimeUnit.MILLISECONDS);或者future.orTimeout(5 * 1000, TimeUnit.MILLISECONDS);使用get会阻塞主线程(发起future的线程),而其它都是要多启用一个线程,包括jdk9原创 2022-02-22 23:31:13 · 934 阅读 · 0 评论 -
netty 要点简单记录
简单记录下netty 要点eventloop可以用于使用scheduler模式定期执行某些动作,如下示意代码 ScheduledFuture<?> future = ch.eventLoop().scheduleAtFixedRate( new Runnable() { @Override public void run() { System.out.prin原创 2022-02-18 08:12:20 · 479 阅读 · 0 评论 -
flink cdc 支持1.14.2 版本记录
https://ververica.github.io/flink-cdc-connectors 2.1.1是居于flink 1.13.3 开发的,使用了flink shaded guava18等类,在1.14.2会有如下错误:WARN org.apache.flink.runtime.taskmanager.Task [] - Source: TableSourceScan(table=[[default_catalog, default_database, sh原创 2021-12-30 23:35:04 · 2791 阅读 · 2 评论 -
DBCP1.X removeAbandoned简单记录
removeAbandoned 打开后会移除长时间没有使用但没有返还的连接,打开后每次数据库连接操作(getConnection,Query)等都会记录一个时间lastused。然后在borrow 会采用以下逻辑; public Object borrowObject() throws Exception { if (config != null && config.getRemoveAbandoned()原创 2021-12-22 23:53:01 · 507 阅读 · 0 评论 -
DBCP 1.X MinIdle ,evict及MinEvictableIdleTimeMillis
MinEvictableIdleTimeMillis 代表一个idle 连接的最长时间,超过就会回收,然后在evict后会检查是否满足最小 idle连接数量,不满足就创建新的连接,因此MinEvictableIdleTimeMillis不能设置过小,否则会可能会频繁创建连接。evict 逻辑 if ((getMinEvictableIdleTimeMillis() > 0) && (idleTimeMilis > getMinEvictable原创 2021-12-21 22:31:07 · 1875 阅读 · 0 评论 -
DBCP 1.X 连接池回收简单分析
连接回收主要包括close时候回收连接及定时evict。close时候回收连接在使用connection close函数的时候,实际是将对象增加到pool中,在增加到pool过程中会检查idle 数量 ,如果超出限定值,进行 destory,实现代码如下: private void addObjectToPool(T obj, boolean decrementNumActive) throws Exception { boolean success = true; i原创 2021-12-20 23:49:45 · 437 阅读 · 0 评论 -
dyno-queue shard对push及pop的影响
dyno-queue (基于2.0.22)提供V1/V2两种queue管理,无论哪种都需要注意如果连接的dynomite归属不同Shardpush 是 将批量数据发送到不同shard,即不同队列中的pop 只取localrack 对应的shard中数据PUSH/POP分析因此如果有多个shard,默认pop是只能取到部分数据的,如果local rack没有找到对应shard,pop会报错,即需要注意以下启动参数:-DLOCAL_RACK=rack1-dc1 -DLOCAL_DATACENTER原创 2021-12-11 15:32:21 · 316 阅读 · 0 评论 -
Map Eclipse plugins to Maven Plugin解决方案
Eclipse import maven项目时候,经常会遇到如下问题:如果有对应插件,安装可以解决以上问题,但有时候是没有对应插件。可以参考https://stackoverflow.com/questions/6352208/how-to-solve-plugin-execution-not-covered-by-lifecycle-configuration-for-sprin进行处理。我用的主要是In Eclipse Luna 4.4.0, you can chose to ignore t原创 2021-11-18 23:45:17 · 233 阅读 · 0 评论 -
com.google.common.util.concurrent.AbstractExecutionThreadService 的triggerShutdown及shutdown分析
AbstractExecutionThreadService 的shutdown分析停止的相关操作(如退出循环的信号)应该在triggerShutdown里面实现shutDown函数是停止后才触发的triggerShutdown的调用堆栈如下:com.github.rholder.retry.examples.neverstop.RepeatWithThreadServicePoolAndFloatTimeout at localhost:64720 Thread [main] (Suspe原创 2021-11-15 21:05:23 · 426 阅读 · 0 评论 -
使用rholder.retry实现固定间隔触发callable
固定间隔触发callable固定时间间隔调用某个callable每次sleep时间=间隔时间- 运行时间Attempt增加本次运行开始时间代码如下: static final class ResultAttempt<R> implements Attempt<R> { private final R result; private final long attemptNumber; private final long d原创 2021-11-11 23:34:38 · 481 阅读 · 0 评论 -
rholder.retry 代码分析
核心执行方法以下代码为修改过代码,非官方:public V call(Callable<V> callable) throws ExecutionException, RetryException { long startTime = System.nanoTime(); for (int attemptNumber = 1; ; attemptNumber++) { Attempt<V> attempt;原创 2021-11-11 23:28:39 · 419 阅读 · 0 评论