最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PowerJob的DatabaseMonitorAspect源碼流程

 更新時(shí)間:2024年01月09日 08:34:23   作者:codecraft  
這篇文章主要為大家介紹了PowerJob的DatabaseMonitorAspect源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本文主要研究一下PowerJob的DatabaseMonitorAspect

DatabaseMonitorAspect

tech/powerjob/server/persistence/monitor/DatabaseMonitorAspect.java

@Slf4j
@Aspect
@Component
@RequiredArgsConstructor
public class DatabaseMonitorAspect {
    private final MonitorService monitorService;
    @Around("execution(* tech.powerjob.server.persistence.remote.repository..*.*(..))")
    public Object monitorCoreDB(ProceedingJoinPoint joinPoint) throws Throwable {
        return wrapperMonitor(joinPoint, DatabaseType.CORE);
    }
    @Around("execution(* tech.powerjob.server.persistence.local..*.*(..))")
    public Object monitorLocalDB(ProceedingJoinPoint joinPoint) throws Throwable {
        return wrapperMonitor(joinPoint, DatabaseType.LOCAL);
    }
    //......
}
DatabaseMonitorAspect攔截了remote和local的repository,然后執(zhí)行wrapperMonitor

wrapperMonitor

private Object wrapperMonitor(ProceedingJoinPoint point, DatabaseType type) throws Throwable {
        String classNameMini = AOPUtils.parseRealClassName(point);
        final String methodName = point.getSignature().getName();
        DatabaseEvent event = new DatabaseEvent().setType(type)
                .setServiceName(classNameMini)
                .setMethodName(methodName)
                .setStatus(DatabaseEvent.Status.SUCCESS);
        long startTs = System.currentTimeMillis();
        try {
            final Object ret = point.proceed();
            event.setRows(parseEffectRows(ret));
            return ret;
        } catch (Throwable t) {
            event.setErrorMsg(t.getClass().getSimpleName()).setStatus(DatabaseEvent.Status.FAILED);
            throw t;
        } finally {
            long cost = System.currentTimeMillis() - startTs;
            monitorService.monitor(event.setCost(cost));
        }
    }
wrapperMonitor主要是構(gòu)建DatabaseEvent,成功時(shí)獲取effectRows,異常時(shí)獲取erroMsg,最后計(jì)算耗時(shí),執(zhí)行monitorService.monitor

MonitorService

tech/powerjob/server/monitor/MonitorService.java

public interface MonitorService {
    void monitor(Event event);
}
MonitorService定義了monitor方法

PowerJobMonitorService

tech/powerjob/server/monitor/PowerJobMonitorService.java

@Slf4j
@Component
public class PowerJobMonitorService implements MonitorService {

    private final List<Monitor> monitors = Lists.newLinkedList();

    public PowerJobMonitorService(List<Monitor> monitors) {
        monitors.forEach(m -> {
            log.info("[MonitorService] register monitor: {}", m.getClass().getName());
            this.monitors.add(m);
        });
    }

    @Override
    public void monitor(Event event) {
        monitors.forEach(m -> m.record(event));
    }
}
PowerJobMonitorService是實(shí)現(xiàn)了MonitorService接口,其monitor方法遍歷monitors,挨個(gè)執(zhí)行record方法

Monitor

tech/powerjob/server/monitor/Monitor.java

public interface Monitor {

    /**
     * 全局上下文綁定 & 初始化
     */
    void init();
    /**
     * 記錄監(jiān)控事件
     * 請注意該方法務(wù)必異步不阻塞!?。?
     * @param event 事件
     */
    void record(Event event);
}
Monitor接口定義了record方法

LogMonitor

tech/powerjob/server/monitor/monitors/LogMonitor.java

@Component
public class LogMonitor implements Monitor, ServerInfoAware {
    /**
     * server 啟動(dòng)依賴 DB,DB會(huì)被 monitor,因此最初的幾條 log serverInfo 一定為空,在此處簡單防空
     */
    private ServerInfo serverInfo = new ServerInfo();
    private static final String MDC_KEY_SERVER_ID = "serverId";
    @Override
    public void init() {
    }
    @Override
    public void record(Event event) {
        MDC.put(MDC_KEY_SERVER_ID, String.valueOf(serverInfo.getId()));
        LoggerFactory.getLogger(event.type()).info(event.message());
    }
    @Override
    public void setServerInfo(ServerInfo serverInfo) {
        this.serverInfo = serverInfo;
    }
}
LogMonitor實(shí)現(xiàn)了Monitor, ServerInfoAware接口,其record方法通過logger打印event的message

小結(jié)

DatabaseMonitorAspect攔截了remote和local的repository,然后執(zhí)行wrapperMonitor;wrapperMonitor主要是構(gòu)建DatabaseEvent,成功時(shí)獲取effectRows,異常時(shí)獲取erroMsg,最后計(jì)算耗時(shí),執(zhí)行monitorService.monitor;LogMonitor的record方法通過logger打印event的message。

以上就是PowerJob DatabaseMonitorAspect源碼流程的詳細(xì)內(nèi)容,更多關(guān)于PowerJob DatabaseMonitorAspect的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java 反射機(jī)制

    java 反射機(jī)制

    本文主要介紹了java反射機(jī)制的相關(guān)知識(shí),具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Java中security與shiro的區(qū)別詳解

    Java中security與shiro的區(qū)別詳解

    這篇文章主要介紹了Java中security與shiro的區(qū)別詳解,Spring?Security在架構(gòu)上將認(rèn)證與授權(quán)分離,并提供了擴(kuò)展點(diǎn),它是一個(gè)輕量級的安全框架,它確?;赟pring的應(yīng)用程序提供身份驗(yàn)證和授權(quán)支持,需要的朋友可以參考下
    2023-08-08
  • Java中HashMap里面key為null存放到哪

    Java中HashMap里面key為null存放到哪

    這篇文章主要介紹了Java中HashMap里面key為null存放到哪,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java的CollectionUtils工具類詳解

    Java的CollectionUtils工具類詳解

    這篇文章主要介紹了Java的CollectionUtils工具類詳解,CollectionUtils工具類是在apache下的,而不是springframework下的,個(gè)人覺得在真實(shí)項(xiàng)目中CollectionUtils,可以使你的代碼更加簡潔和安全,需要的朋友可以參考下
    2023-05-05
  • 使用javax.sound實(shí)現(xiàn)簡單音頻播放

    使用javax.sound實(shí)現(xiàn)簡單音頻播放

    這篇文章主要為大家詳細(xì)介紹了使用javax.sound實(shí)現(xiàn)簡單音頻播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java 多線程死鎖詳解及簡單實(shí)例

    java 多線程死鎖詳解及簡單實(shí)例

    這篇文章主要介紹了java 多線程死鎖詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • JAVA提高第八篇 動(dòng)態(tài)代理技術(shù)

    JAVA提高第八篇 動(dòng)態(tài)代理技術(shù)

    這篇文章主要為大家詳細(xì)介紹了JAVA動(dòng)態(tài)代理技術(shù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制實(shí)例

    java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制的實(shí)現(xiàn)方法,是Java操作漢字編碼轉(zhuǎn)換的一個(gè)典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 使用Mybatis實(shí)現(xiàn)分頁效果示例

    使用Mybatis實(shí)現(xiàn)分頁效果示例

    大家好,本篇文章主要講的是使用Mybatis實(shí)現(xiàn)分頁效果示例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • JAVA內(nèi)存溢出解決方案圖解

    JAVA內(nèi)存溢出解決方案圖解

    這篇文章主要介紹了JAVA內(nèi)存溢出解決方案圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評論

洪湖市| 太白县| 锡林浩特市| 黔西| 那坡县| 武功县| 海晏县| 岚皋县| 若羌县| 海原县| 洛扎县| 湖南省| 乌兰浩特市| 安阳县| 青岛市| 阳曲县| 江陵县| 和田县| 胶南市| 上思县| 遂昌县| 瑞丽市| 五常市| 西畴县| 乐清市| 彭泽县| 武隆县| 陆川县| 昭通市| 汉沽区| 大化| 临城县| 马鞍山市| 华亭县| 谢通门县| 麻城市| 香格里拉县| 临漳县| 历史| 疏勒县| 丰顺县|