This is an automated email from the ASF dual-hosted git repository.

lizhanhui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new f23fdbe01 Replace findbugs by spotbugs (#4931)
f23fdbe01 is described below

commit f23fdbe016ab4b60c2dd9786016c5f4756b3db54
Author: Aaron Ai <[email protected]>
AuthorDate: Tue Aug 30 17:45:56 2022 +0800

    Replace findbugs by spotbugs (#4931)
---
 acl/pom.xml                                        |  4 ++
 .../org/apache/rocketmq/acl/common/AclUtils.java   |  3 +-
 broker/pom.xml                                     |  4 ++
 .../org/apache/rocketmq/broker/BrokerStartup.java  |  2 +-
 .../broker/processor/AdminBrokerProcessor.java     |  3 +-
 .../broker/processor/PopBufferMergeService.java    |  3 +-
 .../broker/processor/ReplyMessageProcessor.java    |  4 +-
 .../queue/TransactionalMessageUtil.java            |  2 +-
 .../org/apache/rocketmq/broker/util/HookUtils.java |  2 +-
 client/pom.xml                                     |  4 ++
 .../rocketmq/client/common/ThreadLocalIndex.java   |  3 +-
 .../client/impl/consumer/RebalanceImpl.java        |  1 -
 .../client/trace/AsyncTraceDispatcher.java         |  3 +-
 common/pom.xml                                     |  4 ++
 .../java/org/apache/rocketmq/common/MixAll.java    | 15 +-------
 .../consistenthash/ConsistentHashRouter.java       |  3 +-
 .../common/protocol/header/ExtraInfoUtil.java      |  6 +--
 .../apache/rocketmq/common/utils/MessageUtils.java |  3 +-
 container/pom.xml                                  |  4 ++
 .../rocketmq/container/BrokerContainerStartup.java |  4 +-
 controller/pom.xml                                 |  4 ++
 distribution/pom.xml                               |  4 ++
 example/pom.xml                                    |  4 ++
 .../example/batch/SimpleBatchProducer.java         |  7 ++--
 .../rocketmq/example/batch/SplitBatchProducer.java |  3 +-
 .../example/namespace/ProducerWithNamespace.java   |  3 +-
 .../example/openmessaging/SimpleProducer.java      |  8 ++--
 .../example/openmessaging/SimplePullConsumer.java  |  3 +-
 .../rocketmq/example/rpc/ResponseConsumer.java     |  3 +-
 .../example/schedule/ScheduledMessageProducer.java |  3 +-
 .../example/schedule/TimerMessageProducer.java     |  3 +-
 .../apache/rocketmq/example/simple/AclClient.java  |  3 +-
 filter/pom.xml                                     |  4 ++
 .../rocketmq/filter/parser/SimpleCharStream.java   | 10 +++--
 logging/pom.xml                                    |  4 ++
 .../rocketmq/logging/InternalLoggerFactory.java    |  2 +-
 .../rocketmq/logging/inner/LoggingBuilder.java     |  3 +-
 namesrv/pom.xml                                    |  4 ++
 openmessaging/pom.xml                              |  4 ++
 pom.xml                                            | 30 ++++++++++++---
 proxy/pom.xml                                      |  1 +
 .../rocketmq/proxy/config/Configuration.java       |  3 +-
 .../grpc/v2/common/GrpcClientSettingsManager.java  |  3 --
 .../proxy/service/route/MessageQueueSelector.java  | 11 +++---
 remoting/pom.xml                                   |  4 ++
 srvutil/pom.xml                                    |  3 ++
 store/pom.xml                                      |  4 ++
 .../apache/rocketmq/store/DefaultMessageStore.java |  3 +-
 .../rocketmq/store/config/MessageStoreConfig.java  |  4 +-
 .../store/ha/autoswitch/AutoSwitchHAClient.java    |  3 +-
 .../ha/autoswitch/AutoSwitchHAConnection.java      |  3 +-
 .../apache/rocketmq/store/timer/TimerMetrics.java  | 28 ++++++++++----
 style/spotbugs-suppressions.xml                    | 43 ++++++++++++++++++++++
 test/pom.xml                                       |  4 ++
 .../test/client/rmq/RMQAsyncSendProducer.java      | 25 +++++++------
 .../test/client/rmq/RMQNormalProducer.java         |  9 +++--
 .../test/client/rmq/RMQTransactionalProducer.java  |  5 ++-
 .../test/clientinterface/AbstractMQProducer.java   |  3 +-
 .../rocketmq/test/factory/MQMessageFactory.java    | 13 ++++---
 .../rocketmq/test/factory/MessageFactory.java      |  7 ++--
 .../rocketmq/test/listener/AbstractListener.java   |  2 +-
 .../listener/rmq/concurrent/RMQDelayListener.java  |  3 +-
 .../listener/rmq/concurrent/RMQNormalListener.java |  5 ++-
 .../test/listener/rmq/order/RMQOrderListener.java  |  5 ++-
 .../rocketmq/test/lmq/benchmark/BenchLmqStore.java | 11 ++++--
 .../apache/rocketmq/test/schema/SchemaDefiner.java |  8 ++--
 .../apache/rocketmq/test/schema/SchemaTools.java   | 18 ++++++---
 .../rocketmq/test/util/DuplicateMessageInfo.java   |  3 +-
 .../org/apache/rocketmq/test/util/FileUtil.java    |  9 ++++-
 .../org/apache/rocketmq/test/util/TestUtil.java    |  5 ++-
 tools/pom.xml                                      |  4 ++
 .../tools/admin/DefaultMQAdminExtImpl.java         |  3 +-
 .../rocketmq/tools/command/MQAdminStartup.java     |  4 +-
 .../command/offset/ResetOffsetByTimeCommand.java   |  2 +-
 .../topic/RemappingStaticTopicSubCommand.java      |  7 ++--
 .../command/topic/UpdateStaticTopicSubCommand.java |  4 +-
 .../rocketmq/tools/monitor/MonitorService.java     |  6 +--
 77 files changed, 319 insertions(+), 145 deletions(-)

diff --git a/acl/pom.xml b/acl/pom.xml
index c4eac5aac..9df280713 100644
--- a/acl/pom.xml
+++ b/acl/pom.xml
@@ -18,6 +18,10 @@
     <artifactId>rocketmq-acl</artifactId>
     <name>rocketmq-acl ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java 
b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
index 69e03523c..f2c1b4082 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
@@ -19,7 +19,6 @@ package org.apache.rocketmq.acl.common;
 import com.alibaba.fastjson.JSONObject;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileWriter;
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.Map;
@@ -256,7 +255,7 @@ public class AclUtils {
 
     public static boolean writeDataObject(String path, Map<String, Object> 
dataMap) {
         Yaml yaml = new Yaml();
-        try (PrintWriter pw = new PrintWriter(new FileWriter(path))) {
+        try (PrintWriter pw = new PrintWriter(path, "UTF-8")) {
             String dumpAsMap = yaml.dumpAsMap(dataMap);
             pw.print(dumpAsMap);
             pw.flush();
diff --git a/broker/pom.xml b/broker/pom.xml
index 077ca82f4..b551266cc 100644
--- a/broker/pom.xml
+++ b/broker/pom.xml
@@ -21,6 +21,10 @@
     <artifactId>rocketmq-broker</artifactId>
     <name>rocketmq-broker ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git a/broker/src/main/java/org/apache/rocketmq/broker/BrokerStartup.java 
b/broker/src/main/java/org/apache/rocketmq/broker/BrokerStartup.java
index f5fc038d1..92ace559a 100644
--- a/broker/src/main/java/org/apache/rocketmq/broker/BrokerStartup.java
+++ b/broker/src/main/java/org/apache/rocketmq/broker/BrokerStartup.java
@@ -53,7 +53,7 @@ public class BrokerStartup {
     public static CommandLine commandLine = null;
     public static String configFile = null;
     public static InternalLogger log;
-    public static SystemConfigFileHelper configFileHelper = new 
SystemConfigFileHelper();
+    public static final SystemConfigFileHelper configFileHelper = new 
SystemConfigFileHelper();
 
     public static void main(String[] args) {
         start(createBrokerController(args));
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
index ab9463a96..3af82641a 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
@@ -22,6 +22,7 @@ import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import java.io.UnsupportedEncodingException;
 import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -374,7 +375,7 @@ public class AdminBrokerProcessor implements 
NettyRequestProcessor {
         groupForbidden.setGroup(group);
         groupForbidden.setTopic(topic);
         groupForbidden.setReadable(!groupManager.getForbidden(group, topic, 
PermName.INDEX_PERM_READ));
-        response.setBody(groupForbidden.toJson().getBytes());
+        
response.setBody(groupForbidden.toJson().getBytes(StandardCharsets.UTF_8));
         return response;
     }
 
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/PopBufferMergeService.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/PopBufferMergeService.java
index bb432a851..a8f93c22b 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/PopBufferMergeService.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/PopBufferMergeService.java
@@ -17,6 +17,7 @@
 package org.apache.rocketmq.broker.processor;
 
 import com.alibaba.fastjson.JSON;
+import java.nio.charset.StandardCharsets;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -605,7 +606,7 @@ public class PopBufferMergeService extends ServiceThread {
         PopCheckPoint point = pointWrapper.getCk();
         MessageExtBrokerInner msgInner = new MessageExtBrokerInner();
         msgInner.setTopic(popMessageProcessor.reviveTopic);
-        msgInner.setBody((pointWrapper.getReviveQueueId() + "-" + 
pointWrapper.getReviveQueueOffset()).getBytes());
+        msgInner.setBody((pointWrapper.getReviveQueueId() + "-" + 
pointWrapper.getReviveQueueOffset()).getBytes(StandardCharsets.UTF_8));
         msgInner.setQueueId(pointWrapper.getReviveQueueId());
         msgInner.setTags(PopAckConstants.CK_TAG);
         msgInner.setBornTimestamp(System.currentTimeMillis());
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/ReplyMessageProcessor.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/ReplyMessageProcessor.java
index 183f64f38..da4d8db1f 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/processor/ReplyMessageProcessor.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/processor/ReplyMessageProcessor.java
@@ -301,7 +301,7 @@ public class ReplyMessageProcessor extends 
AbstractSendMessageProcessor {
 
                 int commercialBaseCount = 
brokerController.getBrokerConfig().getCommercialBaseCount();
                 int wroteSize = 
putMessageResult.getAppendMessageResult().getWroteBytes();
-                int incValue = (int) Math.ceil(wroteSize / 
commercialSizePerMsg) * commercialBaseCount;
+                int incValue = (int) Math.ceil(wroteSize * 1.0 / 
commercialSizePerMsg) * commercialBaseCount;
 
                 
sendMessageContext.setCommercialSendStats(BrokerStatsManager.StatsType.SEND_SUCCESS);
                 sendMessageContext.setCommercialSendTimes(incValue);
@@ -311,7 +311,7 @@ public class ReplyMessageProcessor extends 
AbstractSendMessageProcessor {
         } else {
             if (hasSendMessageHook()) {
                 int wroteSize = request.getBody().length;
-                int incValue = (int) Math.ceil(wroteSize / 
commercialSizePerMsg);
+                int incValue = (int) Math.ceil(wroteSize * 1.0 / 
commercialSizePerMsg);
 
                 
sendMessageContext.setCommercialSendStats(BrokerStatsManager.StatsType.SEND_FAILURE);
                 sendMessageContext.setCommercialSendTimes(incValue);
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/transaction/queue/TransactionalMessageUtil.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/transaction/queue/TransactionalMessageUtil.java
index 2d6774432..cdb010482 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/transaction/queue/TransactionalMessageUtil.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/transaction/queue/TransactionalMessageUtil.java
@@ -24,7 +24,7 @@ import java.nio.charset.StandardCharsets;
 
 public class TransactionalMessageUtil {
     public static final String REMOVETAG = "d";
-    public static Charset charset = StandardCharsets.UTF_8;
+    public static final Charset charset = StandardCharsets.UTF_8;
 
     public static String buildOpTopic() {
         return TopicValidator.RMQ_SYS_TRANS_OP_HALF_TOPIC;
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/util/HookUtils.java 
b/broker/src/main/java/org/apache/rocketmq/broker/util/HookUtils.java
index 298442c45..6a09475f6 100644
--- a/broker/src/main/java/org/apache/rocketmq/broker/util/HookUtils.java
+++ b/broker/src/main/java/org/apache/rocketmq/broker/util/HookUtils.java
@@ -127,7 +127,7 @@ public class HookUtils {
                 || tranType == MessageSysFlag.TRANSACTION_COMMIT_TYPE) {
             if (!isRolledTimerMessage(msg)) {
                 if (checkIfTimerMessage(msg)) {
-                    if (!MessageStoreConfig.isTimerWheelEnable()) {
+                    if 
(!brokerController.getMessageStoreConfig().isTimerWheelEnable()) {
                         //wheel timer is not enabled, reject the message
                         return new 
PutMessageResult(PutMessageStatus.WHEEL_TIMER_NOT_ENABLE, null);
                     }
diff --git a/client/pom.xml b/client/pom.xml
index 4954db03f..bf57e6275 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-client</artifactId>
     <name>rocketmq-client ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git 
a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java 
b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
index 41056fac6..b74efd6eb 100644
--- 
a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
+++ 
b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
@@ -27,10 +27,9 @@ public class ThreadLocalIndex {
     public int incrementAndGet() {
         Integer index = this.threadLocalIndex.get();
         if (null == index) {
-            index = Math.abs(random.nextInt());
+            index = random.nextInt();
             this.threadLocalIndex.set(index);
         }
-
         this.threadLocalIndex.set(++index);
         return Math.abs(index & POSITIVE_MASK);
     }
diff --git 
a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/RebalanceImpl.java
 
b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/RebalanceImpl.java
index dff7efd63..ef763bc99 100644
--- 
a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/RebalanceImpl.java
+++ 
b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/RebalanceImpl.java
@@ -479,7 +479,6 @@ public abstract class RebalanceImpl {
         final boolean isOrder) {
         boolean changed = false;
 
-        Map<MessageQueue, MessageQueue> upgradeMqTable = new 
HashMap<MessageQueue, MessageQueue>();
         // drop process queues no longer belong me
         HashMap<MessageQueue, ProcessQueue> removeQueueMap = new 
HashMap<MessageQueue, ProcessQueue>(this.processQueueTable.size());
         Iterator<Entry<MessageQueue, ProcessQueue>> it = 
this.processQueueTable.entrySet().iterator();
diff --git 
a/client/src/main/java/org/apache/rocketmq/client/trace/AsyncTraceDispatcher.java
 
b/client/src/main/java/org/apache/rocketmq/client/trace/AsyncTraceDispatcher.java
index 139d7232f..923952734 100644
--- 
a/client/src/main/java/org/apache/rocketmq/client/trace/AsyncTraceDispatcher.java
+++ 
b/client/src/main/java/org/apache/rocketmq/client/trace/AsyncTraceDispatcher.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.client.trace;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -394,7 +395,7 @@ public class AsyncTraceDispatcher implements 
TraceDispatcher {
          * @param traceTopic the topic which message trace data will send to
          */
         private void sendTraceDataByMQ(Set<String> keySet, final String data, 
String traceTopic) {
-            final Message message = new Message(traceTopic, data.getBytes());
+            final Message message = new Message(traceTopic, 
data.getBytes(StandardCharsets.UTF_8));
             // Keyset of message trace includes msgId of or original message
             message.setKeys(keySet);
             try {
diff --git a/common/pom.xml b/common/pom.xml
index fc810f26c..aa7f9c337 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-common</artifactId>
     <name>rocketmq-common ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git a/common/src/main/java/org/apache/rocketmq/common/MixAll.java 
b/common/src/main/java/org/apache/rocketmq/common/MixAll.java
index f8eb4a33a..6e9956589 100644
--- a/common/src/main/java/org/apache/rocketmq/common/MixAll.java
+++ b/common/src/main/java/org/apache/rocketmq/common/MixAll.java
@@ -19,13 +19,13 @@ package org.apache.rocketmq.common;
 import org.apache.rocketmq.common.annotation.ImportantField;
 import org.apache.rocketmq.common.constant.LoggerName;
 import org.apache.rocketmq.common.help.FAQUrl;
+import org.apache.rocketmq.common.utils.IOTinyUtils;
 import org.apache.rocketmq.logging.InternalLogger;
 import org.apache.rocketmq.logging.InternalLoggerFactory;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
@@ -184,18 +184,7 @@ public class MixAll {
         if (fileParent != null) {
             fileParent.mkdirs();
         }
-        FileWriter fileWriter = null;
-
-        try {
-            fileWriter = new FileWriter(file);
-            fileWriter.write(str);
-        } catch (IOException e) {
-            throw e;
-        } finally {
-            if (fileWriter != null) {
-                fileWriter.close();
-            }
-        }
+        IOTinyUtils.writeStringToFile(file, str, "UTF-8");
     }
 
     public static String file2String(final String fileName) throws IOException 
{
diff --git 
a/common/src/main/java/org/apache/rocketmq/common/consistenthash/ConsistentHashRouter.java
 
b/common/src/main/java/org/apache/rocketmq/common/consistenthash/ConsistentHashRouter.java
index fca1d877d..33fae11cd 100644
--- 
a/common/src/main/java/org/apache/rocketmq/common/consistenthash/ConsistentHashRouter.java
+++ 
b/common/src/main/java/org/apache/rocketmq/common/consistenthash/ConsistentHashRouter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.common.consistenthash;
 
+import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.Collection;
@@ -122,7 +123,7 @@ public class ConsistentHashRouter<T extends Node> {
         @Override
         public long hash(String key) {
             instance.reset();
-            instance.update(key.getBytes());
+            instance.update(key.getBytes(StandardCharsets.UTF_8));
             byte[] digest = instance.digest();
 
             long h = 0;
diff --git 
a/common/src/main/java/org/apache/rocketmq/common/protocol/header/ExtraInfoUtil.java
 
b/common/src/main/java/org/apache/rocketmq/common/protocol/header/ExtraInfoUtil.java
index 19f37f6cd..39cbe8b2a 100644
--- 
a/common/src/main/java/org/apache/rocketmq/common/protocol/header/ExtraInfoUtil.java
+++ 
b/common/src/main/java/org/apache/rocketmq/common/protocol/header/ExtraInfoUtil.java
@@ -60,7 +60,7 @@ public class ExtraInfoUtil {
         if (extraInfoStrs == null || extraInfoStrs.length < 4) {
             throw new IllegalArgumentException("getReviveQid fail, 
extraInfoStrs length " + (extraInfoStrs == null ? 0 : extraInfoStrs.length));
         }
-        return Integer.valueOf(extraInfoStrs[3]);
+        return Integer.parseInt(extraInfoStrs[3]);
     }
 
     public static String getRealTopic(String[] extraInfoStrs, String topic, 
String cid) {
@@ -85,14 +85,14 @@ public class ExtraInfoUtil {
         if (extraInfoStrs == null || extraInfoStrs.length < 7) {
             throw new IllegalArgumentException("getQueueId fail, extraInfoStrs 
length " + (extraInfoStrs == null ? 0 : extraInfoStrs.length));
         }
-        return Integer.valueOf(extraInfoStrs[6]);
+        return Integer.parseInt(extraInfoStrs[6]);
     }
 
     public static long getQueueOffset(String[] extraInfoStrs) {
         if (extraInfoStrs == null || extraInfoStrs.length < 8) {
             throw new IllegalArgumentException("getQueueOffset fail, 
extraInfoStrs length " + (extraInfoStrs == null ? 0 : extraInfoStrs.length));
         }
-        return Long.valueOf(extraInfoStrs[7]);
+        return Long.parseLong(extraInfoStrs[7]);
     }
 
     public static String buildExtraInfo(long ckQueueOffset, long popTime, long 
invisibleTime, int reviveQid, String topic, String brokerName, int queueId) {
diff --git 
a/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java 
b/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java
index a2affc7e9..0e5ac7add 100644
--- a/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java
+++ b/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.common.utils;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
@@ -27,7 +28,7 @@ import org.apache.rocketmq.common.message.MessageExt;
 public class MessageUtils {
 
     public static int getShardingKeyIndex(String shardingKey, int indexSize) {
-        return 
Math.abs(Hashing.murmur3_32().hashBytes(shardingKey.getBytes()).asInt() % 
indexSize);
+        return 
Math.abs(Hashing.murmur3_32().hashBytes(shardingKey.getBytes(StandardCharsets.UTF_8)).asInt()
 % indexSize);
     }
 
     public static int getShardingKeyIndexByMsg(MessageExt msg, int indexSize) {
diff --git a/container/pom.xml b/container/pom.xml
index 105862e17..d62b957ac 100644
--- a/container/pom.xml
+++ b/container/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-container</artifactId>
     <name>rocketmq-container ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.rocketmq</groupId>
diff --git 
a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerStartup.java
 
b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerStartup.java
index d4e94a698..3d78275a1 100644
--- 
a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerStartup.java
+++ 
b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerStartup.java
@@ -59,9 +59,9 @@ public class BrokerContainerStartup {
     public static CommandLine commandLine = null;
     public static String configFile = null;
     public static InternalLogger log;
-    public static SystemConfigFileHelper configFileHelper = new 
SystemConfigFileHelper();
+    public static final SystemConfigFileHelper configFileHelper = new 
SystemConfigFileHelper();
     public static String rocketmqHome = null;
-    public static JoranConfigurator configurator = new JoranConfigurator();
+    public static final JoranConfigurator configurator = new 
JoranConfigurator();
 
     public static void main(String[] args) {
         final BrokerContainer brokerContainer = 
startBrokerContainer(createBrokerContainer(args));
diff --git a/controller/pom.xml b/controller/pom.xml
index 04dabb0ff..dc0e7a313 100644
--- a/controller/pom.xml
+++ b/controller/pom.xml
@@ -26,6 +26,10 @@
     <artifactId>rocketmq-controller</artifactId>
     <name>rocketmq-controller ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>io.openmessaging.storage</groupId>
diff --git a/distribution/pom.xml b/distribution/pom.xml
index ce27e43de..4ce8f520a 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -26,6 +26,10 @@
     <name>rocketmq-distribution ${project.version}</name>
     <packaging>pom</packaging>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <profiles>
         <profile>
             <id>release-all</id>
diff --git a/example/pom.xml b/example/pom.xml
index 5f9f4ffb7..3849fa00a 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-example</artifactId>
     <name>rocketmq-example ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/batch/SimpleBatchProducer.java
 
b/example/src/main/java/org/apache/rocketmq/example/batch/SimpleBatchProducer.java
index 30863032e..cf82c2a87 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/batch/SimpleBatchProducer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/batch/SimpleBatchProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.example.batch;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.rocketmq.client.producer.DefaultMQProducer;
@@ -39,9 +40,9 @@ public class SimpleBatchProducer {
         //If you just send messages of no more than 1MiB at a time, it is easy 
to use batch
         //Messages of the same batch should have: same topic, same 
waitStoreMsgOK and no schedule support
         List<Message> messages = new ArrayList<>();
-        messages.add(new Message(TOPIC, TAG, "OrderID001", "Hello world 
0".getBytes()));
-        messages.add(new Message(TOPIC, TAG, "OrderID002", "Hello world 
1".getBytes()));
-        messages.add(new Message(TOPIC, TAG, "OrderID003", "Hello world 
2".getBytes()));
+        messages.add(new Message(TOPIC, TAG, "OrderID001", "Hello world 
0".getBytes(StandardCharsets.UTF_8)));
+        messages.add(new Message(TOPIC, TAG, "OrderID002", "Hello world 
1".getBytes(StandardCharsets.UTF_8)));
+        messages.add(new Message(TOPIC, TAG, "OrderID003", "Hello world 
2".getBytes(StandardCharsets.UTF_8)));
 
         SendResult sendResult = producer.send(messages);
         System.out.printf("%s", sendResult);
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/batch/SplitBatchProducer.java
 
b/example/src/main/java/org/apache/rocketmq/example/batch/SplitBatchProducer.java
index aca4f1683..d33a5a5bb 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/batch/SplitBatchProducer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/batch/SplitBatchProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.example.batch;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -44,7 +45,7 @@ public class SplitBatchProducer {
         //large batch
         List<Message> messages = new ArrayList<>(MESSAGE_COUNT);
         for (int i = 0; i < MESSAGE_COUNT; i++) {
-            messages.add(new Message(TOPIC, TAG, "OrderID" + i, ("Hello world 
" + i).getBytes()));
+            messages.add(new Message(TOPIC, TAG, "OrderID" + i, ("Hello world 
" + i).getBytes(StandardCharsets.UTF_8)));
         }
 
         //split the large batch into small ones:
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/namespace/ProducerWithNamespace.java
 
b/example/src/main/java/org/apache/rocketmq/example/namespace/ProducerWithNamespace.java
index 66c7ec096..ccbd6d0de 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/namespace/ProducerWithNamespace.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/namespace/ProducerWithNamespace.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.example.namespace;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.rocketmq.client.producer.DefaultMQProducer;
 import org.apache.rocketmq.client.producer.SendResult;
 import org.apache.rocketmq.common.message.Message;
@@ -36,7 +37,7 @@ public class ProducerWithNamespace {
         producer.setNamesrvAddr(DEFAULT_NAMESRVADDR);
         producer.start();
         for (int i = 0; i < MESSAGE_COUNT; i++) {
-            Message message = new Message(TOPIC, TAG, "Hello 
world".getBytes());
+            Message message = new Message(TOPIC, TAG, "Hello 
world".getBytes(StandardCharsets.UTF_8));
             try {
                 SendResult result = producer.send(message);
                 System.out.printf("Topic:%s send success, misId is:%s%n", 
message.getTopic(), result.getMsgId());
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimpleProducer.java
 
b/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimpleProducer.java
index 803faaa23..ec72aa0dd 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimpleProducer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimpleProducer.java
@@ -22,6 +22,7 @@ import io.openmessaging.MessagingAccessPoint;
 import io.openmessaging.OMS;
 import io.openmessaging.producer.Producer;
 import io.openmessaging.producer.SendResult;
+import java.nio.charset.StandardCharsets;
 import java.util.concurrent.CountDownLatch;
 
 public class SimpleProducer {
@@ -43,7 +44,7 @@ public class SimpleProducer {
         System.out.printf("Producer startup OK%n");
 
         {
-            Message message = producer.createBytesMessage(QUEUE, 
"OMS_HELLO_BODY".getBytes());
+            Message message = producer.createBytesMessage(QUEUE, 
"OMS_HELLO_BODY".getBytes(StandardCharsets.UTF_8));
 
             SendResult sendResult = producer.send(message);
             //final Void aVoid = result.get(3000L);
@@ -52,7 +53,8 @@ public class SimpleProducer {
 
         final CountDownLatch countDownLatch = new CountDownLatch(1);
         {
-            final Future<SendResult> result = 
producer.sendAsync(producer.createBytesMessage(QUEUE, 
"OMS_HELLO_BODY".getBytes()));
+            final Future<SendResult> result = 
producer.sendAsync(producer.createBytesMessage(QUEUE,
+                "OMS_HELLO_BODY".getBytes(StandardCharsets.UTF_8)));
             result.addListener(future -> {
                 if (future.getThrowable() != null) {
                     System.out.printf("Send async message Failed, error: 
%s%n", future.getThrowable().getMessage());
@@ -64,7 +66,7 @@ public class SimpleProducer {
         }
 
         {
-            producer.sendOneway(producer.createBytesMessage("OMS_HELLO_TOPIC", 
"OMS_HELLO_BODY".getBytes()));
+            producer.sendOneway(producer.createBytesMessage("OMS_HELLO_TOPIC", 
"OMS_HELLO_BODY".getBytes(StandardCharsets.UTF_8)));
             System.out.printf("Send oneway message OK%n");
         }
 
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimplePullConsumer.java
 
b/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimplePullConsumer.java
index 2c0059ab8..9ad69b31b 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimplePullConsumer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/openmessaging/SimplePullConsumer.java
@@ -23,6 +23,7 @@ import io.openmessaging.OMSBuiltinKeys;
 import io.openmessaging.consumer.PullConsumer;
 import io.openmessaging.producer.Producer;
 import io.openmessaging.producer.SendResult;
+import java.nio.charset.StandardCharsets;
 
 public class SimplePullConsumer {
 
@@ -48,7 +49,7 @@ public class SimplePullConsumer {
         final String queueName = "TopicTest";
 
         producer.startup();
-        Message msg = producer.createBytesMessage(queueName, "Hello Open 
Messaging".getBytes());
+        Message msg = producer.createBytesMessage(queueName, "Hello Open 
Messaging".getBytes(StandardCharsets.UTF_8));
         SendResult sendResult = producer.send(msg);
         System.out.printf("Send Message OK. MsgId: %s%n", 
sendResult.messageId());
         producer.shutdown();
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/rpc/ResponseConsumer.java 
b/example/src/main/java/org/apache/rocketmq/example/rpc/ResponseConsumer.java
index 421297cc3..a1c18ae69 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/rpc/ResponseConsumer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/rpc/ResponseConsumer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.example.rpc;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
@@ -59,7 +60,7 @@ public class ResponseConsumer {
                     try {
                         System.out.printf("handle message: %s %n", 
msg.toString());
                         String replyTo = MessageUtil.getReplyToClient(msg);
-                        byte[] replyContent = "reply message 
contents.".getBytes();
+                        byte[] replyContent = "reply message 
contents.".getBytes(StandardCharsets.UTF_8);
                         // create reply message with given util, do not create 
reply message by yourself
                         Message replyMessage = 
MessageUtil.createReplyMessage(msg, replyContent);
 
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/schedule/ScheduledMessageProducer.java
 
b/example/src/main/java/org/apache/rocketmq/example/schedule/ScheduledMessageProducer.java
index 994c81e64..aeae492dd 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/schedule/ScheduledMessageProducer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/schedule/ScheduledMessageProducer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.example.schedule;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.rocketmq.client.producer.DefaultMQProducer;
 import org.apache.rocketmq.client.producer.SendResult;
 import org.apache.rocketmq.common.message.Message;
@@ -37,7 +38,7 @@ public class ScheduledMessageProducer {
         producer.start();
         int totalMessagesToSend = 100;
         for (int i = 0; i < totalMessagesToSend; i++) {
-            Message message = new Message(TOPIC, ("Hello scheduled message " + 
i).getBytes());
+            Message message = new Message(TOPIC, ("Hello scheduled message " + 
i).getBytes(StandardCharsets.UTF_8));
             // This message will be delivered to consumer 10 seconds later.
             message.setDelayTimeLevel(3);
             // Send the message
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/schedule/TimerMessageProducer.java
 
b/example/src/main/java/org/apache/rocketmq/example/schedule/TimerMessageProducer.java
index 18a1b61f5..baa8da7c8 100644
--- 
a/example/src/main/java/org/apache/rocketmq/example/schedule/TimerMessageProducer.java
+++ 
b/example/src/main/java/org/apache/rocketmq/example/schedule/TimerMessageProducer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.example.schedule;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.rocketmq.client.producer.DefaultMQProducer;
 import org.apache.rocketmq.client.producer.SendResult;
 import org.apache.rocketmq.common.message.Message;
@@ -37,7 +38,7 @@ public class TimerMessageProducer {
         producer.start();
         int totalMessagesToSend = 10;
         for (int i = 0; i < totalMessagesToSend; i++) {
-            Message message = new Message(TOPIC, ("Hello scheduled message " + 
i).getBytes());
+            Message message = new Message(TOPIC, ("Hello scheduled message " + 
i).getBytes(StandardCharsets.UTF_8));
             // This message will be delivered to consumer 10 seconds later.
             //message.setDelayTimeSec(10);
             // The effect is the same as the above
diff --git 
a/example/src/main/java/org/apache/rocketmq/example/simple/AclClient.java 
b/example/src/main/java/org/apache/rocketmq/example/simple/AclClient.java
index 0c97cd332..c1f56ec9c 100644
--- a/example/src/main/java/org/apache/rocketmq/example/simple/AclClient.java
+++ b/example/src/main/java/org/apache/rocketmq/example/simple/AclClient.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.example.simple;
 
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -145,7 +146,7 @@ public class AclClient {
             return;
         for (MessageExt m : msg) {
             if (m != null) {
-                System.out.printf("msgId : %s  body : %s  \n\r", m.getMsgId(), 
new String(m.getBody()));
+                System.out.printf("msgId : %s  body : %s  \n\r", m.getMsgId(), 
new String(m.getBody(), StandardCharsets.UTF_8));
             }
         }
     }
diff --git a/filter/pom.xml b/filter/pom.xml
index 5c5080f39..6b6791f60 100644
--- a/filter/pom.xml
+++ b/filter/pom.xml
@@ -28,6 +28,10 @@
     <artifactId>rocketmq-filter</artifactId>
     <name>rocketmq-filter ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git 
a/filter/src/main/java/org/apache/rocketmq/filter/parser/SimpleCharStream.java 
b/filter/src/main/java/org/apache/rocketmq/filter/parser/SimpleCharStream.java
index c10250e3b..42626f0f2 100644
--- 
a/filter/src/main/java/org/apache/rocketmq/filter/parser/SimpleCharStream.java
+++ 
b/filter/src/main/java/org/apache/rocketmq/filter/parser/SimpleCharStream.java
@@ -19,6 +19,8 @@
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 package org.apache.rocketmq.filter.parser;
 
+import java.nio.charset.StandardCharsets;
+
 /**
  * An implementation of interface CharStream, where the stream is assumed to
  * contain only ASCII characters (without unicode processing).
@@ -331,7 +333,7 @@ public class SimpleCharStream {
     public SimpleCharStream(java.io.InputStream dstream, String encoding, int 
startline,
         int startcolumn, int buffersize) throws 
java.io.UnsupportedEncodingException {
         this(encoding == null ?
-            new java.io.InputStreamReader(dstream) :
+            new java.io.InputStreamReader(dstream, StandardCharsets.UTF_8) :
             new java.io.InputStreamReader(dstream, encoding), startline, 
startcolumn, buffersize);
     }
 
@@ -340,7 +342,7 @@ public class SimpleCharStream {
      */
     public SimpleCharStream(java.io.InputStream dstream, int startline,
         int startcolumn, int buffersize) {
-        this(new java.io.InputStreamReader(dstream), startline, startcolumn, 
buffersize);
+        this(new java.io.InputStreamReader(dstream, StandardCharsets.UTF_8), 
startline, startcolumn, buffersize);
     }
 
     /**
@@ -379,7 +381,7 @@ public class SimpleCharStream {
     public void ReInit(java.io.InputStream dstream, String encoding, int 
startline,
         int startcolumn, int buffersize) throws 
java.io.UnsupportedEncodingException {
         ReInit(encoding == null ?
-            new java.io.InputStreamReader(dstream) :
+            new java.io.InputStreamReader(dstream, StandardCharsets.UTF_8) :
             new java.io.InputStreamReader(dstream, encoding), startline, 
startcolumn, buffersize);
     }
 
@@ -388,7 +390,7 @@ public class SimpleCharStream {
      */
     public void ReInit(java.io.InputStream dstream, int startline,
         int startcolumn, int buffersize) {
-        ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 
buffersize);
+        ReInit(new java.io.InputStreamReader(dstream, StandardCharsets.UTF_8), 
startline, startcolumn, buffersize);
     }
 
     /**
diff --git a/logging/pom.xml b/logging/pom.xml
index 6a1572e72..4df7df5fb 100644
--- a/logging/pom.xml
+++ b/logging/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-logging</artifactId>
     <name>rocketmq-logging ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.slf4j</groupId>
diff --git 
a/logging/src/main/java/org/apache/rocketmq/logging/InternalLoggerFactory.java 
b/logging/src/main/java/org/apache/rocketmq/logging/InternalLoggerFactory.java
index e4b57328c..2370a911e 100644
--- 
a/logging/src/main/java/org/apache/rocketmq/logging/InternalLoggerFactory.java
+++ 
b/logging/src/main/java/org/apache/rocketmq/logging/InternalLoggerFactory.java
@@ -38,7 +38,7 @@ public abstract class InternalLoggerFactory {
 
     private static String loggerType = null;
 
-    public static ThreadLocal<String> brokerIdentity = new 
ThreadLocal<String>();
+    public static final ThreadLocal<String> brokerIdentity = new 
ThreadLocal<String>();
 
     private static ConcurrentHashMap<String, InternalLoggerFactory> 
loggerFactoryCache = new ConcurrentHashMap<String, InternalLoggerFactory>();
 
diff --git 
a/logging/src/main/java/org/apache/rocketmq/logging/inner/LoggingBuilder.java 
b/logging/src/main/java/org/apache/rocketmq/logging/inner/LoggingBuilder.java
index 7468cd498..996551e77 100644
--- 
a/logging/src/main/java/org/apache/rocketmq/logging/inner/LoggingBuilder.java
+++ 
b/logging/src/main/java/org/apache/rocketmq/logging/inner/LoggingBuilder.java
@@ -27,6 +27,7 @@ import java.io.InterruptedIOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -534,7 +535,7 @@ public class LoggingBuilder {
                 }
             }
             if (retval == null) {
-                retval = new OutputStreamWriter(os);
+                retval = new OutputStreamWriter(os, StandardCharsets.UTF_8);
             }
             return retval;
         }
diff --git a/namesrv/pom.xml b/namesrv/pom.xml
index e6c96a862..5334204f7 100644
--- a/namesrv/pom.xml
+++ b/namesrv/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-namesrv</artifactId>
     <name>rocketmq-namesrv ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git a/openmessaging/pom.xml b/openmessaging/pom.xml
index 071fede40..2481a6ac1 100644
--- a/openmessaging/pom.xml
+++ b/openmessaging/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-openmessaging</artifactId>
     <name>rocketmq-openmessaging ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>io.openmessaging</groupId>
diff --git a/pom.xml b/pom.xml
index 6f53a33cb..25d4d4d1a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,6 +91,7 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <project.root>${basedir}</project.root>
 
         <!-- Maven properties -->
         <maven.test.skip>false</maven.test.skip>
@@ -152,8 +153,8 @@
         <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
         <jacoco-maven-plugin.version>0.8.5</jacoco-maven-plugin.version>
         <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
-        <findbugs-maven-plugin.version>3.0.4</findbugs-maven-plugin.version>
         <sonar-maven-plugin.version>3.0.2</sonar-maven-plugin.version>
+        <spotbugs-plugin.version>4.2.2</spotbugs-plugin.version>
         <maven-assembly-plugin.version>3.0.0</maven-assembly-plugin.version>
         <maven-javadoc-plugin.version>2.10.4</maven-javadoc-plugin.version>
         <maven-failsafe-plugin.version>2.19.1</maven-failsafe-plugin.version>
@@ -380,16 +381,33 @@
                     </excludes>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>findbugs-maven-plugin</artifactId>
-                <version>${findbugs-maven-plugin.version}</version>
-            </plugin>
             <plugin>
                 <groupId>org.sonarsource.scanner.maven</groupId>
                 <artifactId>sonar-maven-plugin</artifactId>
                 <version>${sonar-maven-plugin.version}</version>
             </plugin>
+            <plugin>
+                <groupId>com.github.spotbugs</groupId>
+                <artifactId>spotbugs-maven-plugin</artifactId>
+                <version>${spotbugs-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>check</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <failOnError>true</failOnError>
+                    <fork>false</fork>
+                    <spotbugsXmlOutput>true</spotbugsXmlOutput>
+                    
<excludeFilterFile>${project.root}/style/spotbugs-suppressions.xml</excludeFilterFile>
+                    <threshold>High</threshold>
+                    <effort>Max</effort>
+                </configuration>
+            </plugin>
         </plugins>
 
         <pluginManagement>
diff --git a/proxy/pom.xml b/proxy/pom.xml
index a72f30c82..f8978cc05 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -33,6 +33,7 @@
     <properties>
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
+        <project.root>${basedir}/..</project.root>
     </properties>
 
     <dependencies>
diff --git 
a/proxy/src/main/java/org/apache/rocketmq/proxy/config/Configuration.java 
b/proxy/src/main/java/org/apache/rocketmq/proxy/config/Configuration.java
index aaba6ef9c..59078c712 100644
--- a/proxy/src/main/java/org/apache/rocketmq/proxy/config/Configuration.java
+++ b/proxy/src/main/java/org/apache/rocketmq/proxy/config/Configuration.java
@@ -23,6 +23,7 @@ import com.google.common.io.CharStreams;
 import java.io.File;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.rocketmq.common.constant.LoggerName;
@@ -65,7 +66,7 @@ public class Configuration {
             return null;
         }
 
-        return new String(Files.readAllBytes(file.toPath()));
+        return new String(Files.readAllBytes(file.toPath()), 
StandardCharsets.UTF_8);
     }
 
     public ProxyConfig getProxyConfig() {
diff --git 
a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java
 
b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java
index 3943b3392..2e6d4f67e 100644
--- 
a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java
+++ 
b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcClientSettingsManager.java
@@ -194,9 +194,6 @@ public class GrpcClientSettingsManager {
             settings = mergeSubscriptionData(ctx, settings,
                 
GrpcConverter.getInstance().wrapResourceWithNamespace(settings.getSubscription().getGroup()));
         }
-        if (settings == null) {
-            return null;
-        }
         return mergeMetric(settings);
     }
 }
diff --git 
a/proxy/src/main/java/org/apache/rocketmq/proxy/service/route/MessageQueueSelector.java
 
b/proxy/src/main/java/org/apache/rocketmq/proxy/service/route/MessageQueueSelector.java
index cf5314c79..a05eedd50 100644
--- 
a/proxy/src/main/java/org/apache/rocketmq/proxy/service/route/MessageQueueSelector.java
+++ 
b/proxy/src/main/java/org/apache/rocketmq/proxy/service/route/MessageQueueSelector.java
@@ -17,6 +17,7 @@
 package org.apache.rocketmq.proxy.service.route;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.math.IntMath;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -51,9 +52,9 @@ public class MessageQueueSelector {
             this.queues.addAll(buildWrite(topicRouteWrapper));
         }
         buildBrokerActingQueues(topicRouteWrapper.getTopicName(), this.queues);
-
-        this.queueIndex = new AtomicInteger(Math.abs(new Random().nextInt()));
-        this.brokerIndex = new AtomicInteger(Math.abs(new Random().nextInt()));
+        Random random = new Random();
+        this.queueIndex = new AtomicInteger(random.nextInt());
+        this.brokerIndex = new AtomicInteger(random.nextInt());
     }
 
     private static List<AddressableMessageQueue> buildRead(TopicRouteWrapper 
topicRoute) {
@@ -172,13 +173,13 @@ public class MessageQueueSelector {
             if (brokerActingQueues.isEmpty()) {
                 return null;
             }
-            return brokerActingQueues.get(Math.abs(index) % 
brokerActingQueues.size());
+            return brokerActingQueues.get(IntMath.mod(index, 
brokerActingQueues.size()));
         }
 
         if (queues.isEmpty()) {
             return null;
         }
-        return queues.get(Math.abs(index) % queues.size());
+        return queues.get(IntMath.mod(index, queues.size()));
     }
 
     public List<AddressableMessageQueue> getQueues() {
diff --git a/remoting/pom.xml b/remoting/pom.xml
index 484fa95f6..f567d84ea 100644
--- a/remoting/pom.xml
+++ b/remoting/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-remoting</artifactId>
     <name>rocketmq-remoting ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>com.alibaba</groupId>
diff --git a/srvutil/pom.xml b/srvutil/pom.xml
index a59e00894..99ee96bce 100644
--- a/srvutil/pom.xml
+++ b/srvutil/pom.xml
@@ -27,6 +27,9 @@
     <artifactId>rocketmq-srvutil</artifactId>
     <name>rocketmq-srvutil ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
 
     <dependencies>
         <dependency>
diff --git a/store/pom.xml b/store/pom.xml
index 332a5f51f..03f6aa93d 100644
--- a/store/pom.xml
+++ b/store/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-store</artifactId>
     <name>rocketmq-store ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>io.openmessaging.storage</groupId>
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java 
b/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java
index c48d06654..d3e5ef06c 100644
--- a/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java
+++ b/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java
@@ -26,6 +26,7 @@ import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileLock;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -327,7 +328,7 @@ public class DefaultMessageStore implements MessageStore {
             throw new RuntimeException("Lock failed,MQ already started");
         }
 
-        lockFile.getChannel().write(ByteBuffer.wrap("lock".getBytes()));
+        
lockFile.getChannel().write(ByteBuffer.wrap("lock".getBytes(StandardCharsets.UTF_8)));
         lockFile.getChannel().force(true);
 
         if (this.getMessageStoreConfig().isDuplicationEnable()) {
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java 
b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java
index 9b69e75d9..1d5b73336 100644
--- 
a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java
+++ 
b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java
@@ -62,7 +62,7 @@ public class MessageStoreConfig {
     private boolean timerEnableCheckMetrics = true;
     private boolean timerInterceptDelayLevel = false;
     private int timerMaxDelaySec = 3600 * 24 * 3;
-    private static boolean timerWheelEnable = true;
+    private boolean timerWheelEnable = true;
 
     /**
      * 1. Register to broker after (startTime + disappearTimeAfterStart)
@@ -1441,7 +1441,7 @@ public class MessageStoreConfig {
         return timerWarmEnable;
     }
 
-    public static boolean isTimerWheelEnable() {
+    public  boolean isTimerWheelEnable() {
         return timerWheelEnable;
     }
     public void setTimerWheelEnable(boolean timerWheelEnable) {
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAClient.java
 
b/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAClient.java
index f41c0a81b..53903a1df 100644
--- 
a/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAClient.java
+++ 
b/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAClient.java
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
 import java.nio.channels.SocketChannel;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
@@ -268,7 +269,7 @@ public class AutoSwitchHAClient extends ServiceThread 
implements HAClient {
         // Address length
         this.handshakeHeaderBuffer.putInt(this.localAddress == null ? 0 : 
this.localAddress.length());
         // Slave address
-        this.handshakeHeaderBuffer.put(this.localAddress == null ? new byte[0] 
: this.localAddress.getBytes());
+        this.handshakeHeaderBuffer.put(this.localAddress == null ? new byte[0] 
: this.localAddress.getBytes(StandardCharsets.UTF_8));
 
         this.handshakeHeaderBuffer.flip();
         return this.haWriter.write(this.socketChannel, 
this.handshakeHeaderBuffer);
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java
 
b/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java
index 98fd77891..63e4b6b9e 100644
--- 
a/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java
+++ 
b/store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
 import java.nio.channels.SocketChannel;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import org.apache.rocketmq.common.EpochEntry;
 import org.apache.rocketmq.common.ServiceThread;
@@ -313,7 +314,7 @@ public class AutoSwitchHAConnection implements HAConnection 
{
                                 final byte[] addressData = new 
byte[addressLength];
                                 byteBufferRead.position(readPosition + 
AutoSwitchHAClient.HANDSHAKE_HEADER_SIZE);
                                 byteBufferRead.get(addressData);
-                                AutoSwitchHAConnection.this.slaveAddress = new 
String(addressData);
+                                AutoSwitchHAConnection.this.slaveAddress = new 
String(addressData, StandardCharsets.UTF_8);
 
                                 isSlaveSendHandshake = true;
                                 byteBufferRead.position(readSocketPos);
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java 
b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
index 1d963aea9..b82569b89 100644
--- a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
+++ b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
@@ -19,6 +19,10 @@ package org.apache.rocketmq.store.timer;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.google.common.io.Files;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Paths;
 import org.apache.rocketmq.common.ConfigManager;
 import org.apache.rocketmq.common.DataVersion;
 import org.apache.rocketmq.common.constant.LoggerName;
@@ -86,18 +90,26 @@ public class TimerMetrics extends ConfigManager {
 
     public Metric getDistPair(Integer period) {
         Metric pair = timingDistribution.get(period);
-        if (null == pair) {
-            pair = new Metric();
-            timingDistribution.putIfAbsent(period, pair);
+        if (null != pair) {
+            return pair;
+        }
+        pair = new Metric();
+        final Metric previous = timingDistribution.putIfAbsent(period, pair);
+        if (null != previous) {
+            return previous;
         }
         return pair;
     }
 
     public Metric getTopicPair(String topic) {
         Metric pair = timingCount.get(topic);
-        if (null == pair) {
-            pair = new Metric();
-            timingCount.putIfAbsent(topic, pair);
+        if (null != pair) {
+            return pair;
+        }
+        pair = new Metric();
+        final Metric previous = timingCount.putIfAbsent(topic, pair);
+        if (null != previous) {
+            return previous;
         }
         return pair;
     }
@@ -110,7 +122,6 @@ public class TimerMetrics extends ConfigManager {
         this.timerDist = timerDist;
     }
 
-
     public long getTimingCount(String topic) {
         Metric pair = timingCount.get(topic);
         if (null == pair) {
@@ -226,7 +237,8 @@ public class TimerMetrics extends ConfigManager {
                     return;
                 }
             }
-            bufferedWriter = new BufferedWriter(new FileWriter(tmpFile, 
false));
+            bufferedWriter = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(tmpFile, false),
+                StandardCharsets.UTF_8));
             write0(bufferedWriter);
             bufferedWriter.flush();
             log.debug("Finished writing tmp file: {}", temp);
diff --git a/style/spotbugs-suppressions.xml b/style/spotbugs-suppressions.xml
new file mode 100644
index 000000000..607080cfb
--- /dev/null
+++ b/style/spotbugs-suppressions.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<FindBugsFilter>
+    <Match>
+        <Class name="org.apache.rocketmq.remoting.netty.TlsSystemConfig"/>
+        <Field name="tlsConfigFile"/>
+        <Bug pattern="MS_SHOULD_BE_FINAL"/>
+    </Match>
+    <Match>
+        <Class name="org.apache.rocketmq.remoting.netty.TlsSystemConfig"/>
+        <Field name="tlsMode"/>
+        <Bug pattern="MS_SHOULD_BE_FINAL"/>
+    </Match>
+    <Match>
+        <Class name="org.apache.rocketmq.store.index.IndexFile"/>
+        <Method name="indexKeyHashMethod" />
+        <Bug pattern="RV_ABSOLUTE_VALUE_OF_HASHCODE"/>
+    </Match>
+    <Match>
+        <Class 
name="org.apache.rocketmq.broker.transaction.queue.DefaultTransactionalMessageCheckListener"/>
+        <Method name="toMessageExtBrokerInner" />
+        <Bug pattern="INT_BAD_REM_BY_1"/>
+    </Match>
+    <Match>
+        <Class 
name="org.apache.rocketmq.tools.command.cluster.ClusterListSubCommand"/>
+        <Method name="execute" />
+        <Bug pattern="IL_INFINITE_LOOP"/>
+    </Match>
+</FindBugsFilter>
diff --git a/test/pom.xml b/test/pom.xml
index 2e5863775..bb6d28c06 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-test</artifactId>
     <name>rocketmq-test ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>log4j</groupId>
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQAsyncSendProducer.java
 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQAsyncSendProducer.java
index 9907cac80..d28a5fd3a 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQAsyncSendProducer.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQAsyncSendProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.client.rmq;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -108,7 +109,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.send(metaqMsg, sendCallback);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -119,7 +120,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         this.msgSize = msgSize;
 
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.asyncSend(msg);
         }
     }
@@ -128,7 +129,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.send(metaqMsg, selector, arg, sendCallback);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -138,7 +139,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
     public void asyncSend(int msgSize, MessageQueueSelector selector) {
         this.msgSize = msgSize;
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.asyncSend(msg, selector, i);
         }
     }
@@ -147,7 +148,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.send(metaqMsg, mq, sendCallback);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -157,7 +158,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
     public void asyncSend(int msgSize, MessageQueue mq) {
         this.msgSize = msgSize;
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.asyncSend(msg, mq);
         }
     }
@@ -178,7 +179,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.sendOneway(metaqMsg);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -187,7 +188,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
 
     public void sendOneWay(int msgSize) {
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.sendOneWay(msg);
         }
     }
@@ -196,7 +197,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.sendOneway(metaqMsg, mq);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -205,7 +206,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
 
     public void sendOneWay(int msgSize, MessageQueue mq) {
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.sendOneWay(msg, mq);
         }
     }
@@ -214,7 +215,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
         Message metaqMsg = (Message) msg;
         try {
             producer.sendOneway(metaqMsg, selector, arg);
-            msgBodys.addData(new String(metaqMsg.getBody()));
+            msgBodys.addData(new String(metaqMsg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         } catch (Exception e) {
             e.printStackTrace();
@@ -223,7 +224,7 @@ public class RMQAsyncSendProducer extends 
AbstractMQProducer {
 
     public void sendOneWay(int msgSize, MessageQueueSelector selector) {
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             this.sendOneWay(msg, selector, i);
         }
     }
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQNormalProducer.java 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQNormalProducer.java
index 001db9584..eb8cf44be 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQNormalProducer.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQNormalProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.client.rmq;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 import org.apache.log4j.Logger;
@@ -105,9 +106,9 @@ public class RMQNormalProducer extends AbstractMQProducer {
             sendResult.setMsgId(metaqResult.getMsgId());
             
sendResult.setSendResult(metaqResult.getSendStatus().equals(SendStatus.SEND_OK));
             
sendResult.setBrokerIp(metaqResult.getMessageQueue().getBrokerName());
-            msgBodys.addData(new String(message.getBody()));
+            msgBodys.addData(new String(message.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
-            originMsgIndex.put(new String(message.getBody()), metaqResult);
+            originMsgIndex.put(new String(message.getBody(), 
StandardCharsets.UTF_8), metaqResult);
         } catch (Exception e) {
             if (isDebug) {
                 e.printStackTrace();
@@ -151,9 +152,9 @@ public class RMQNormalProducer extends AbstractMQProducer {
             sendResult.setMsgId(metaqResult.getMsgId());
             
sendResult.setSendResult(metaqResult.getSendStatus().equals(SendStatus.SEND_OK));
             
sendResult.setBrokerIp(metaqResult.getMessageQueue().getBrokerName());
-            msgBodys.addData(new String(msg.getBody()));
+            msgBodys.addData(new String(msg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
-            originMsgIndex.put(new String(msg.getBody()), metaqResult);
+            originMsgIndex.put(new String(msg.getBody(), 
StandardCharsets.UTF_8), metaqResult);
         } catch (Exception e) {
             if (isDebug) {
                 e.printStackTrace();
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQTransactionalProducer.java
 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQTransactionalProducer.java
index dcc76b2d8..69563e0e1 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQTransactionalProducer.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/client/rmq/RMQTransactionalProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.client.rmq;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.log4j.Logger;
 import org.apache.rocketmq.client.exception.MQClientException;
 import org.apache.rocketmq.client.producer.LocalTransactionState;
@@ -82,10 +83,10 @@ public class RMQTransactionalProducer extends 
AbstractMQProducer {
             sendResult.setSendResult(true);
             
sendResult.setBrokerIp(metaqResult.getMessageQueue().getBrokerName());
             if (commitMsg) {
-                msgBodys.addData(new String(message.getBody()));
+                msgBodys.addData(new String(message.getBody(), 
StandardCharsets.UTF_8));
             }
             originMsgs.addData(msg);
-            originMsgIndex.put(new String(message.getBody()), metaqResult);
+            originMsgIndex.put(new String(message.getBody(), 
StandardCharsets.UTF_8), metaqResult);
         } catch (MQClientException e) {
             if (isDebug) {
                 e.printStackTrace();
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/clientinterface/AbstractMQProducer.java
 
b/test/src/main/java/org/apache/rocketmq/test/clientinterface/AbstractMQProducer.java
index 1e0a19a2b..258000b09 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/clientinterface/AbstractMQProducer.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/clientinterface/AbstractMQProducer.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.clientinterface;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.List;
 import org.apache.rocketmq.common.message.MessageQueue;
@@ -98,7 +99,7 @@ public abstract class AbstractMQProducer extends MQCollector 
implements MQProduc
         Object objMsg = null;
         if (this instanceof RMQNormalProducer) {
             org.apache.rocketmq.common.message.Message msg = new 
org.apache.rocketmq.common.message.Message(
-                topic, (RandomUtil.getStringByUUID() + "." + new 
Date()).getBytes());
+                topic, (RandomUtil.getStringByUUID() + "." + new 
Date()).getBytes(StandardCharsets.UTF_8));
             objMsg = msg;
             if (tag != null) {
                 msg.setTags(tag);
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/factory/MQMessageFactory.java 
b/test/src/main/java/org/apache/rocketmq/test/factory/MQMessageFactory.java
index f998fcb13..ca472f039 100644
--- a/test/src/main/java/org/apache/rocketmq/test/factory/MQMessageFactory.java
+++ b/test/src/main/java/org/apache/rocketmq/test/factory/MQMessageFactory.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.factory;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -33,7 +34,7 @@ public class MQMessageFactory {
     public static List<Object> getRMQMessage(String tag, String topic, int 
msgSize) {
         List<Object> msgs = new ArrayList<Object>();
         for (int i = 0; i < msgSize; i++) {
-            msgs.add(new Message(topic, tag, 
RandomUtil.getStringByUUID().getBytes()));
+            msgs.add(new Message(topic, tag, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8)));
         }
 
         return msgs;
@@ -43,7 +44,7 @@ public class MQMessageFactory {
         List<Object> msgs = new ArrayList<Object>();
         for (int i = 0; i < msgSize; i++) {
             for (String tag : tags) {
-                msgs.add(new Message(topic, tag, 
RandomUtil.getStringByUUID().getBytes()));
+                msgs.add(new Message(topic, tag, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8)));
             }
         }
         return msgs;
@@ -52,7 +53,7 @@ public class MQMessageFactory {
     public static List<Object> getMessageBody(List<Object> msgs) {
         List<Object> msgBodys = new ArrayList<Object>();
         for (Object msg : msgs) {
-            msgBodys.add(new String(((Message) msg).getBody()));
+            msgBodys.add(new String(((Message) msg).getBody(), 
StandardCharsets.UTF_8));
         }
 
         return msgBodys;
@@ -69,7 +70,7 @@ public class MQMessageFactory {
     public static List<Object> getDelayMsg(String topic, int delayLevel, int 
msgSize) {
         List<Object> msgs = new ArrayList<Object>();
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             msg.setDelayTimeLevel(delayLevel);
             msgs.add(msg);
         }
@@ -79,7 +80,7 @@ public class MQMessageFactory {
     public static List<Object> getKeyMsg(String topic, String key, int 
msgSize) {
         List<Object> msgs = new ArrayList<Object>();
         for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, null, key, 
RandomUtil.getStringByUUID().getBytes());
+            Message msg = new Message(topic, null, key, 
RandomUtil.getStringByUUID().getBytes(StandardCharsets.UTF_8));
             msgs.add(msg);
         }
         return msgs;
@@ -111,7 +112,7 @@ public class MQMessageFactory {
     public static List<Object> getMsg(String topic, int msgSize, String tag) {
         List<Object> msgs = new ArrayList<Object>();
         while (msgSize > 0) {
-            Message msg = new Message(topic, (index++).toString().getBytes());
+            Message msg = new Message(topic, 
(index++).toString().getBytes(StandardCharsets.UTF_8));
             if (tag != null) {
                 msg.setTags(tag);
             }
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/factory/MessageFactory.java 
b/test/src/main/java/org/apache/rocketmq/test/factory/MessageFactory.java
index 8f7170004..f5b542873 100644
--- a/test/src/main/java/org/apache/rocketmq/test/factory/MessageFactory.java
+++ b/test/src/main/java/org/apache/rocketmq/test/factory/MessageFactory.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.factory;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -30,13 +31,11 @@ public class MessageFactory {
     }
 
     public static Message getStringMessage(String topic, String body) {
-        Message msg = new Message(topic, body.getBytes());
-        return msg;
+        return new Message(topic, body.getBytes(StandardCharsets.UTF_8));
     }
 
     public static Message getStringMessageByTag(String topic, String tags, 
String body) {
-        Message msg = new Message(topic, tags, body.getBytes());
-        return msg;
+        return new Message(topic, tags, body.getBytes(StandardCharsets.UTF_8));
     }
 
     public static Message getRandomMessageByTag(String topic, String tags) {
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/listener/AbstractListener.java 
b/test/src/main/java/org/apache/rocketmq/test/listener/AbstractListener.java
index a186e73fe..dd269392e 100644
--- a/test/src/main/java/org/apache/rocketmq/test/listener/AbstractListener.java
+++ b/test/src/main/java/org/apache/rocketmq/test/listener/AbstractListener.java
@@ -28,7 +28,7 @@ import org.apache.rocketmq.test.clientinterface.MQCollector;
 import org.apache.rocketmq.test.util.TestUtil;
 
 public class AbstractListener extends MQCollector implements MessageListener {
-    public static Logger logger = Logger.getLogger(AbstractListener.class);
+    public static final Logger logger = 
Logger.getLogger(AbstractListener.class);
     protected boolean isDebug = true;
     protected String listenerName = null;
     protected Collection<Object> allSendMsgs = null;
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQDelayListener.java
 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQDelayListener.java
index ad369288d..78cbb4e90 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQDelayListener.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQDelayListener.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.listener.rmq.concurrent;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
 import 
org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
@@ -53,7 +54,7 @@ public class RMQDelayListener extends AbstractListener 
implements MessageListene
                 logger.info(listenerName + ":" + msg);
             }
 
-            msgBodys.addData(new String(msg.getBody()));
+            msgBodys.addData(new String(msg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
             msgDelayTimes.addData(Math.abs(recvTime - msg.getBornTimestamp()));
         }
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQNormalListener.java
 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQNormalListener.java
index 07de524a4..e49a90af4 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQNormalListener.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/concurrent/RMQNormalListener.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.listener.rmq.concurrent;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
@@ -61,10 +62,10 @@ public class RMQNormalListener extends AbstractListener 
implements MessageListen
                 }
             }
 
-            msgBodys.addData(new String(msg.getBody()));
+            msgBodys.addData(new String(msg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
             if (originMsgIndex != null) {
-                originMsgIndex.put(new String(msg.getBody()), msg);
+                originMsgIndex.put(new String(msg.getBody(), 
StandardCharsets.UTF_8), msg);
             }
         }
         return consumeStatus;
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/order/RMQOrderListener.java
 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/order/RMQOrderListener.java
index f48386660..b4d5442bf 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/listener/rmq/order/RMQOrderListener.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/listener/rmq/order/RMQOrderListener.java
@@ -17,6 +17,7 @@
 
 package org.apache.rocketmq.test.listener.rmq.order;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -56,7 +57,7 @@ public class RMQOrderListener extends AbstractListener 
implements MessageListene
             msgQueue = msgs.get(key);
         }
 
-        msgQueue.add(new String(msg.getBody()));
+        msgQueue.add(new String(msg.getBody(), StandardCharsets.UTF_8));
         msgs.put(key, msgQueue);
     }
 
@@ -77,7 +78,7 @@ public class RMQOrderListener extends AbstractListener 
implements MessageListene
             }
 
             putMsg(msg);
-            msgBodys.addData(new String(msg.getBody()));
+            msgBodys.addData(new String(msg.getBody(), 
StandardCharsets.UTF_8));
             originMsgs.addData(msg);
         }
 
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/lmq/benchmark/BenchLmqStore.java 
b/test/src/main/java/org/apache/rocketmq/test/lmq/benchmark/BenchLmqStore.java
index d9335ebec..df71fb3be 100644
--- 
a/test/src/main/java/org/apache/rocketmq/test/lmq/benchmark/BenchLmqStore.java
+++ 
b/test/src/main/java/org/apache/rocketmq/test/lmq/benchmark/BenchLmqStore.java
@@ -16,6 +16,9 @@
  */
 package org.apache.rocketmq.test.lmq.benchmark;
 
+import com.google.common.math.IntMath;
+import com.google.common.math.LongMath;
+import java.nio.charset.StandardCharsets;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer;
 import org.apache.rocketmq.client.consumer.PullCallback;
@@ -127,9 +130,9 @@ public class BenchLmqStore {
         if (enableSub && lmqNum > 0 && StringUtils.isNotBlank(brokerName)) {
             for (int i = 0; i < lmqNum; i++) {
                 long idx = rid.incrementAndGet();
-                String queue = LMQ_PREFIX + queuePrefix + idx % lmqNum;
+                String queue = LMQ_PREFIX + queuePrefix + LongMath.mod(idx, 
lmqNum);
                 MessageQueue mq = new MessageQueue(queue, brokerName, 0);
-                int queueHash = Math.abs(queue.hashCode()) % consumerThreadNum;
+                int queueHash = IntMath.mod(queue.hashCode(), 
consumerThreadNum);
                 pullEvent.putIfAbsent(queueHash, new ConcurrentHashMap<>());
                 pullEvent.get(queueHash).put(mq, idx);
             }
@@ -142,7 +145,7 @@ public class BenchLmqStore {
         for (int j = 0; j < size; j += 10) {
             sb.append("hello baby");
         }
-        byte[] body = sb.toString().getBytes();
+        byte[] body = sb.toString().getBytes(StandardCharsets.UTF_8);
         String pubKey = "pub";
         ExecutorService sendPool = Executors.newFixedThreadPool(sendThreadNum);
         for (int i = 0; i < sendThreadNum; i++) {
@@ -172,7 +175,7 @@ public class BenchLmqStore {
                         if (enableSub) {
                             MessageQueue mq = new MessageQueue(queue, 
sendResult.getMessageQueue().getBrokerName(),
                                     lmqNum > 0 ? 0 : 
sendResult.getMessageQueue().getQueueId());
-                            int queueHash = Math.abs(queue.hashCode()) % 
consumerThreadNum;
+                            int queueHash = IntMath.mod(queue.hashCode(), 
consumerThreadNum);
                             pullEvent.putIfAbsent(queueHash, new 
ConcurrentHashMap<>());
                             pullEvent.get(queueHash).put(mq, idx);
                         }
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/schema/SchemaDefiner.java 
b/test/src/main/java/org/apache/rocketmq/test/schema/SchemaDefiner.java
index 0180fa8ee..85d267773 100644
--- a/test/src/main/java/org/apache/rocketmq/test/schema/SchemaDefiner.java
+++ b/test/src/main/java/org/apache/rocketmq/test/schema/SchemaDefiner.java
@@ -53,11 +53,11 @@ import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
 import org.reflections.Reflections;
 
 public class SchemaDefiner {
-    public static Map<Class<?>, Set<String>> ignoredFields = new HashMap<>();
+    public static final Map<Class<?>, Set<String>> ignoredFields = new 
HashMap<>();
     //Use name as the key instead of X.class directly. X.class is not equal to 
field.getType().
-    public static Set<String> fieldClassNames = new HashSet<>();
-    public static List<Class<?>> apiClassList = new ArrayList<>();
-    public static List<Class<?>> protocolClassList = new ArrayList<>();
+    public static final Set<String> fieldClassNames = new HashSet<>();
+    public static final List<Class<?>> apiClassList = new ArrayList<>();
+    public static final List<Class<?>> protocolClassList = new ArrayList<>();
 
     public static void doLoad() {
         {
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/schema/SchemaTools.java 
b/test/src/main/java/org/apache/rocketmq/test/schema/SchemaTools.java
index 5184afc88..06fcaf4c6 100644
--- a/test/src/main/java/org/apache/rocketmq/test/schema/SchemaTools.java
+++ b/test/src/main/java/org/apache/rocketmq/test/schema/SchemaTools.java
@@ -19,12 +19,16 @@ package org.apache.rocketmq.test.schema;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -201,9 +205,11 @@ public class SchemaTools {
     public static void write(Map<String, TreeMap<String, String>> schemaMap, 
String base, String label) throws Exception {
         for (Map.Entry<String, TreeMap<String, String>> entry : 
schemaMap.entrySet()) {
             TreeMap<String, String> map = entry.getValue();
-            File file = new File(String.format("%s/%s/%s.schema", base, label, 
entry.getKey()));
-            FileWriter fileWriter = new FileWriter(file);
-            fileWriter.write("/*\n" +
+            final String fileName = String.format("%s/%s/%s.schema", base, 
label, entry.getKey());
+            File file = new File(fileName);
+            FileOutputStream fileStream = new FileOutputStream(file);
+            Writer writer = new OutputStreamWriter(fileStream, 
StandardCharsets.UTF_8);
+            writer.write("/*\n" +
                 " * Licensed to the Apache Software Foundation (ASF) under one 
or more\n" +
                 " * contributor license agreements.  See the NOTICE file 
distributed with\n" +
                 " * this work for additional information regarding copyright 
ownership.\n" +
@@ -220,9 +226,9 @@ public class SchemaTools {
                 " * limitations under the License.\n" +
                 " */\n\n\n");
             for (Map.Entry<String, String> kv: map.entrySet()) {
-                fileWriter.append(String.format("%s : %s\n", kv.getKey(), 
kv.getValue()));
+                writer.append(String.format("%s : %s\n", kv.getKey(), 
kv.getValue()));
             }
-            fileWriter.close();
+            writer.close();
         }
     }
 
@@ -230,7 +236,7 @@ public class SchemaTools {
         File dir = new File(String.format("%s/%s", base, label));
         Map<String, TreeMap<String, String>> schemaMap = new TreeMap<>();
         for (File file: dir.listFiles()) {
-            BufferedReader br = new BufferedReader(new InputStreamReader(new 
FileInputStream(file)));
+            BufferedReader br = new BufferedReader(new InputStreamReader(new 
FileInputStream(file), StandardCharsets.UTF_8));
             String line = null;
             TreeMap<String, String> kvs = new TreeMap<>();
             while ((line = br.readLine()) != null) {
diff --git 
a/test/src/main/java/org/apache/rocketmq/test/util/DuplicateMessageInfo.java 
b/test/src/main/java/org/apache/rocketmq/test/util/DuplicateMessageInfo.java
index c90c5c9bf..8aa284031 100644
--- a/test/src/main/java/org/apache/rocketmq/test/util/DuplicateMessageInfo.java
+++ b/test/src/main/java/org/apache/rocketmq/test/util/DuplicateMessageInfo.java
@@ -21,6 +21,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
 import java.text.DecimalFormat;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -108,7 +109,7 @@ public class DuplicateMessageInfo<T> {
             for (int i = 0; i < msgListSize; i++)
                 strToWrite += strBQueue.get(i).toString() + "\r\n";
 
-            byteToWrite = strToWrite.getBytes();
+            byteToWrite = strToWrite.getBytes(StandardCharsets.UTF_8);
             out.write(byteToWrite);
             out.close();
         }
diff --git a/test/src/main/java/org/apache/rocketmq/test/util/FileUtil.java 
b/test/src/main/java/org/apache/rocketmq/test/util/FileUtil.java
index de1101003..49f986beb 100644
--- a/test/src/main/java/org/apache/rocketmq/test/util/FileUtil.java
+++ b/test/src/main/java/org/apache/rocketmq/test/util/FileUtil.java
@@ -18,8 +18,12 @@
 package org.apache.rocketmq.test.util;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.util.Map.Entry;
 import java.util.Properties;
 
@@ -77,9 +81,10 @@ public class FileUtil {
     }
 
     private void writeFile(File file, String content, boolean append) {
-        FileWriter writer = null;
+        Writer writer = null;
         try {
-            writer = new FileWriter(file.getAbsoluteFile(), append);
+            FileOutputStream fileStream = new FileOutputStream(file, append);
+            writer = new OutputStreamWriter(fileStream, 
StandardCharsets.UTF_8);
             writer.write(content);
             writer.flush();
         } catch (IOException e) {
diff --git a/test/src/main/java/org/apache/rocketmq/test/util/TestUtil.java 
b/test/src/main/java/org/apache/rocketmq/test/util/TestUtil.java
index 591b3b7b3..604ee5c87 100644
--- a/test/src/main/java/org/apache/rocketmq/test/util/TestUtil.java
+++ b/test/src/main/java/org/apache/rocketmq/test/util/TestUtil.java
@@ -18,6 +18,7 @@
 package org.apache.rocketmq.test.util;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
@@ -94,10 +95,10 @@ public final class TestUtil {
         try {
             byte[] b = new byte[1024];
             int n = System.in.read(b);
-            String s = new String(b, 0, n - 1).replace("\r", "").replace("\n", 
"");
+            String s = new String(b, 0, n - 1, 
StandardCharsets.UTF_8).replace("\r", "").replace("\n", "");
             while (!s.equals(keyWord)) {
                 n = System.in.read(b);
-                s = new String(b, 0, n - 1);
+                s = new String(b, 0, n - 1, StandardCharsets.UTF_8);
             }
         } catch (IOException e) {
             e.printStackTrace();
diff --git a/tools/pom.xml b/tools/pom.xml
index 467795d8f..c4ff40cd5 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -27,6 +27,10 @@
     <artifactId>rocketmq-tools</artifactId>
     <name>rocketmq-tools ${project.version}</name>
 
+    <properties>
+        <project.root>${basedir}/..</project.root>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/admin/DefaultMQAdminExtImpl.java
 
b/tools/src/main/java/org/apache/rocketmq/tools/admin/DefaultMQAdminExtImpl.java
index 00ca230a5..ebba9d96a 100644
--- 
a/tools/src/main/java/org/apache/rocketmq/tools/admin/DefaultMQAdminExtImpl.java
+++ 
b/tools/src/main/java/org/apache/rocketmq/tools/admin/DefaultMQAdminExtImpl.java
@@ -529,7 +529,8 @@ public class DefaultMQAdminExtImpl implements MQAdminExt, 
MQAdminExtInner {
                 }
 
                 if (result.getOffsetTable().isEmpty()) {
-                    
AdminToolResult.failure(AdminToolsResultCodeEnum.CONSUMER_NOT_ONLINE, "Not 
found the consumer group consume stats, because return offset table is empty, 
maybe the consumer not consume any message");
+                    return 
AdminToolResult.failure(AdminToolsResultCodeEnum.CONSUMER_NOT_ONLINE, "Not 
found the "
+                        + "consumer group consume stats, because return offset 
table is empty, maybe the consumer not consume any message");
                 }
                 return AdminToolResult.success(result);
             }
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/command/MQAdminStartup.java 
b/tools/src/main/java/org/apache/rocketmq/tools/command/MQAdminStartup.java
index c27dce1a2..005004dee 100644
--- a/tools/src/main/java/org/apache/rocketmq/tools/command/MQAdminStartup.java
+++ b/tools/src/main/java/org/apache/rocketmq/tools/command/MQAdminStartup.java
@@ -105,9 +105,9 @@ import 
org.apache.rocketmq.tools.command.topic.UpdateTopicSubCommand;
 import org.slf4j.LoggerFactory;
 
 public class MQAdminStartup {
-    protected static List<SubCommand> subCommandList = new 
ArrayList<SubCommand>();
+    protected static final List<SubCommand> subCommandList = new 
ArrayList<SubCommand>();
 
-    private static String rocketmqHome = 
System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY,
+    private static final String rocketmqHome = 
System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY,
         System.getenv(MixAll.ROCKETMQ_HOME_ENV));
 
     public static void main(String[] args) {
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/command/offset/ResetOffsetByTimeCommand.java
 
b/tools/src/main/java/org/apache/rocketmq/tools/command/offset/ResetOffsetByTimeCommand.java
index eeb95c6e8..f95c7e514 100644
--- 
a/tools/src/main/java/org/apache/rocketmq/tools/command/offset/ResetOffsetByTimeCommand.java
+++ 
b/tools/src/main/java/org/apache/rocketmq/tools/command/offset/ResetOffsetByTimeCommand.java
@@ -111,7 +111,7 @@ public class ResetOffsetByTimeCommand implements SubCommand 
{
             }
             int queueId = -1;
             if (commandLine.hasOption("q")) {
-                queueId = Integer.valueOf(commandLine.getOptionValue('q'));
+                queueId = Integer.parseInt(commandLine.getOptionValue('q'));
             }
 
             if (commandLine.hasOption('n')) {
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
 
b/tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
index ba4e54e11..a5b82f07b 100644
--- 
a/tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
+++ 
b/tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.tools.command.topic;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionGroup;
@@ -95,7 +96,8 @@ public class RemappingStaticTopicSubCommand implements 
SubCommand {
 
             String mapFileName = commandLine.getOptionValue('f').trim();
             String mapData = MixAll.file2String(mapFileName);
-            TopicRemappingDetailWrapper wrapper = 
TopicRemappingDetailWrapper.decode(mapData.getBytes(), 
TopicRemappingDetailWrapper.class);
+            TopicRemappingDetailWrapper wrapper = 
TopicRemappingDetailWrapper.decode(mapData.getBytes(StandardCharsets.UTF_8),
+                TopicRemappingDetailWrapper.class);
             //double check the config
             TopicQueueMappingUtils.checkNameEpochNumConsistence(topic, 
wrapper.getBrokerConfigMap());
             TopicQueueMappingUtils.checkAndBuildMappingItems(new 
ArrayList<>(TopicQueueMappingUtils.getMappingDetailFromConfig(wrapper.getBrokerConfigMap().values())),
 false, true);
@@ -132,8 +134,7 @@ public class RemappingStaticTopicSubCommand implements 
SubCommand {
         
defaultMQAdminExt.setInstanceName(Long.toString(System.currentTimeMillis()));
 
         ClientMetadata clientMetadata = new ClientMetadata();
-        Map<String, TopicConfigAndQueueMapping> brokerConfigMap = new 
HashMap<>();
-        Map<Integer, TopicQueueMappingOne> globalIdMap = new HashMap<>();
+        Map<String, TopicConfigAndQueueMapping> brokerConfigMap;
         Set<String> targetBrokers = new HashSet<>();
 
         try {
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
 
b/tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
index d67b8fbf2..639191add 100644
--- 
a/tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
+++ 
b/tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.tools.command.topic;
 
+import java.nio.charset.StandardCharsets;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionGroup;
@@ -97,7 +98,8 @@ public class UpdateStaticTopicSubCommand implements 
SubCommand {
             String topic = commandLine.getOptionValue('t').trim();
             String mapFileName = commandLine.getOptionValue('f').trim();
             String mapData = MixAll.file2String(mapFileName);
-            TopicRemappingDetailWrapper wrapper = 
TopicRemappingDetailWrapper.decode(mapData.getBytes(), 
TopicRemappingDetailWrapper.class);
+            TopicRemappingDetailWrapper wrapper = 
TopicRemappingDetailWrapper.decode(mapData.getBytes(StandardCharsets.UTF_8),
+                TopicRemappingDetailWrapper.class);
             //double check the config
             TopicQueueMappingUtils.checkNameEpochNumConsistence(topic, 
wrapper.getBrokerConfigMap());
             boolean force = false;
diff --git 
a/tools/src/main/java/org/apache/rocketmq/tools/monitor/MonitorService.java 
b/tools/src/main/java/org/apache/rocketmq/tools/monitor/MonitorService.java
index 94f588da2..150745d17 100644
--- a/tools/src/main/java/org/apache/rocketmq/tools/monitor/MonitorService.java
+++ b/tools/src/main/java/org/apache/rocketmq/tools/monitor/MonitorService.java
@@ -26,6 +26,7 @@ import java.util.TreeMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import org.apache.commons.lang3.RandomUtils;
 import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer;
 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
 import org.apache.rocketmq.client.consumer.PullResult;
@@ -134,9 +135,8 @@ public class MonitorService {
     }
 
     private String instanceName() {
-        String name =
-            System.currentTimeMillis() + new Random().nextInt() + 
this.monitorConfig.getNamesrvAddr();
-
+        final int randomInteger = RandomUtils.nextInt(0, Integer.MAX_VALUE);
+        String name = System.currentTimeMillis() + randomInteger + 
this.monitorConfig.getNamesrvAddr();
         return "MonitorService_" + name.hashCode();
     }
 

Reply via email to