Procházet zdrojové kódy

新增hibernate拦截和zuul拦截

chenweida před 6 roky
rodič
revize
227ba79824

+ 14 - 17
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HibernateFilter.java

@ -5,20 +5,25 @@ import com.yihu.admin.client.websocket.event.SQLTimeEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Iterator;
/**
 * Created by chenweida on 2018/5/31 0031.
 */
@Component
@Order(0)
public class HibernateFilter extends EmptyInterceptor {
    private Logger logger = LoggerFactory.getLogger(HibernateFilter.class);
    @Autowired
    private Tracer tracer;
    @Autowired
@ -28,37 +33,29 @@ public class HibernateFilter extends EmptyInterceptor {
    @Value("${spring.application.name}")
    private String spanrName;
    private ThreadLocal<Long> startTimeThreadLocal = new ThreadLocal<>();
    private ThreadLocal<String> sqlThreadLocal = new ThreadLocal<>();
    @Override
    public String onPrepareStatement(String sql) {
        sqlThreadLocal.set(sql);
        return sql;
    public HibernateFilter() {
        logger.info(" init HibernateFilter success!!!");
    }
    @Override
    public void afterTransactionBegin(Transaction tx) {
        startTimeThreadLocal.set(new Date().getTime());
    }
    @Override
    public void afterTransactionCompletion(Transaction tx) {
    public String onPrepareStatement(String sql) {
        if (adminClientProperties.getHibernateSql()) {
            Long endTime = new Date().getTime();
            SQLTimeEvent event = new SQLTimeEvent();
            //用改变后的参数执行目标方法
            event.setSql(sqlThreadLocal.get());
            Long startTime = System.currentTimeMillis();
            event.setEventStartTime(startTimeThreadLocal.get());
            event.setSql(sql);
            event.setEventStartTime(endTime);
            event.setEventEndTime(endTime);
            event.setEventName("system_sql_tracer");
            event.setExcuteTime(endTime - startTime);
            event.setExcuteTime(-1L);
            event.setSpanName(spanrName);
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
        }
        return sql;
    }
}