package com.xzz.tread;
import lombok.extern.slf4j.Slf4j;
import java.io.UnsupportedEncodingException;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
public final class CommonUtil {
public CommonUtil() {
}
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}
public static String getPid() {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String name = runtime.getName(); // format: "pid@hostname"
try {
//return name.substring(0, name.indexOf('@'));
return name;
} catch (Exception e) {
return "pid";
}
}
public static String getDate(String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(new Date());
}
public static String getHostName() {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String name = runtime.getName(); // format: "pid@hostname"
try {
return name.substring(name.indexOf('@') + 1);
//return name;
} catch (Exception e) {
return "hostName";
}
}
}
package com.xzz.tread;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
public class TraceUtils {
private static Map serialMap = new HashMap();
private static ReentrantLock traceLock = new ReentrantLock();
private static String lastTime = "";
private static String getTime(){
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
return df.format(new Date());
}
private static String getSerialNo(String nodeNode,String currentTime,int length){
traceLock.lock();
Integer serialNo = serialMap.get(nodeNode);
if(lastTime.equals(currentTime)){
serialNo += 1;
}else{
serialNo = 1;
lastTime = currentTime;
}
serialMap.put(nodeNode, serialNo);
traceLock.unlock();
return String.format("%0"+length+"d",serialNo);
}
public static String getTraceId(String nodeNode){
String time = getTime() + (int) ((Math.random() * 9 + 1) * 100000);
return time + nodeNode + getSerialNo(nodeNode,time,6);
}
}
package com.xzz.tread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
@RestController
@Slf4j
public class TreadCeShi {
private static final String NODE_NAME = CommonUtil.getPid();
@RequestMapping("TreadCeShi")
private String TreadCeShi() {
//生成线程号
Thread.currentThread().setName(TraceUtils.getTraceId(NODE_NAME));
String name = Thread.currentThread().getName();
System.out.println(name);
return "s [" + name + "]";
}
}