澳门网络娱乐游戏平台-澳门电子游戏娱乐网址-官方直营

最新赌博的网址大全:spring笔记(二卡塔尔(英语:State of Qatar)

近来顾客今后提出系统访谈超级慢,要求优化提高访谈速度,在排查了nginx、tomcat内存和服务器负荷之后,剖断是数据库查询速度慢,进一层逐个审查核对开采是因为一些视图和表查询极度慢招致了全方位连串的响适当时候间挑升长。知道了难点之后,就须要对查询超级慢的接口进行优化,但怎么样接口需求优化、哪些无需呢?只好通过日记里的实施时间来判别,那么如何才干分晓每三个接口的推行时间呢?

 

对此那么些主题素材,想到了运用动态代理的格局统后生可畏记录方式的实行时间并打字与印刷日志,那样就能够很直观、方便的看见种种接口的实行时间了。

共性难题:

鉴于应用的是spring框架,对象都以由spring统少年老成保管的,所以最终动用的是 Spring AOP 切面编制程序来统豆蔻年华记录接口的实践时间,具体代码如下(基于注脚的方法):

1. 服务器运维报错,什么原因?

@Component
@Aspect
public class AopLoggerAspect {

    private static final Logger logger = Logger.getLogger(AopLoggerAspect.class);

    @Pointcut("execution(public * com.iflytek.credit.platform.*.service.impl.*Impl.*(..)) || execution(public * com.iflytek.credit.platform.*.controller.*Controller.*(..))")
    public void pointCut() {

    }

    @Before("pointCut()")
    public void boBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Method Name : [" + methodName + "] ---> AOP before ");
    }

    @After("pointCut()")
    public void doAfter(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Method Name : [" + methodName + "] ---> AOP after ");
    }

    @AfterReturning(pointcut = "pointCut()",returning = "result")
    public void afterReturn(JoinPoint joinPoint, Object result) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Method Name : [" + methodName + "] ---> AOP after return ,and result is : " + result.toString());
    }

    @AfterThrowing(pointcut = "pointCut()",throwing = "throwable")
    public void afterThrowing(JoinPoint joinPoint, Throwable throwable) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Method Name : [" + methodName + "] ---> AOP after throwing ,and throwable message is : " + throwable.getMessage());
    }

    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        try {
            logger.info("Method Name : [" + methodName + "] ---> AOP around start");
            long startTimeMillis = System.currentTimeMillis();
            //调用 proceed() 方法才会真正的执行实际被代理的方法
            Object result = joinPoint.proceed();
            long execTimeMillis = System.currentTimeMillis() - startTimeMillis;
            logger.info("Method Name : [" + methodName + "] ---> AOP method exec time millis : " + execTimeMillis);
            logger.info("Method Name : [" + methodName + "] ---> AOP around end , and result is : " + result.toString());
            return result;
        } catch (Throwable te) {
            logger.error(te.getMessage(),te);
            throw new RuntimeException(te.getMessage());
        }
    }

}

*澳门娱乐就上01311平台网,最新赌博的网址大全, jar包缺少、jar包冲突

 

1卡塔尔(قطر‎ 先检查项目中是不是贫乏jar包引用

率先,须求创立一个类,然后在类名上加上五个注脚

2卡塔尔(قطر‎ 服务器: 检查jar包有未有公布到服务器下;

@Component
@Aspect

客商库jar包,要求手动揭橥到tomcat. (每一趟新建项目卡塔尔

@Component 评释是让这一个类被spring当做一个bean管理,@Aspect 评释是申明那个类是叁个断面对象

3卡塔尔(قطر‎ 重新发表项目

类里面各个方法的笺注含义如下:

 

@Pointcut  用于定义切面的匹配规则,如果想要同事匹配多个的话,可以使用 || 把两个规则连接起来,具体可以参照上面的代码

@Before  目标方法执行前调用

@After  目标方法执行后调用

@AfterReturning  目标方法执行后调用,可以拿到返回结果,执行顺序在 @After 之后

@AfterThrowing  目标方法执行异常时调用

@Around  调用实际的目标方法,可以在目标方法调用前做一些操作,也可以在目标方法调用后做一些操作。使用场景有:事物管理、权限控制,日志打印、性能分析等等

* 配置文件漏洞非常多

如上正是种种表明的含义和效果与利益,重视的五个评释正是 @Pointcut 和 @Around 申明,@Pointcut用来钦赐切面法规,决定哪些地点使用那个切面;@Around 会实际的去调用目的措施,那样就足以在目的措施的调用前后做一些拍卖,举个例子事物、权限、日志等等。

(web.xml / struts.xml /bean.xml /hibernate.xml / *.hbm.xml)

内需小心的是,那几个主意的执行各样:

旗帜明显的提示

进行对象措施前: 先步向 around ,再进入before 
对象措施施行到位后: 先进入 around ,再进来 after ,最终步入 afterreturning 

 

实在的日志新闻如下,能够见到各类艺术的奉行顺序:
澳门娱乐就上01311平台网 1

* 端口占用

 

 

其余,使用spring aop 要求在spring的配备文件加上以下那行配置,以张开aop :

* webapps项目过多

<aop:aspectj-autoproxy/>

最近项目并没分外,有希望是任何品种出错,那样起步也会报错!但那些荒诞不是日前不当报的,所以不影响当下项目运营.

再正是,maven中须求参加依赖的jar包:

 

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>1.6.12</version>
</dependency>
<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.6.12</version>
</dependency>

注意:

小结一下,Spring AOP 其实正是运用动态代理来对切面层实行归拢的拍卖,动态代理的点子有:JDK动态代理和 cglib 动态代理,JDK动态代理基于接口实现, cglib 动态代理基于子类完结。spring暗中同意使用的是JDK动态代理,若无接口,spring会自动的使用cglib动态代理。

相符开拓中,贰个tomcat下独有叁个门类。

 

 

参考:

2. 日常运维报错: ClassNotFoundException相当

少jar包。

 

(两篇都以相比好的稿子,在那多谢笔者)

3. 做客404,什么来头?

 

1)客商端路线写错,或跳转错误。

2)运转报错

Web项目中,运行后决然要看下,是还是不是报错。

 

 

4. 点击有些意义报错。

后台代码错误:

 找到页面,点击哪个操作,提交到哪些地方

--》后台在付出地址的率先行打断点

 

 

Spring提供了一整套建设方案:

本文由澳门网络娱乐游戏平台发布于编程,转载请注明出处:最新赌博的网址大全:spring笔记(二卡塔尔(英语:State of Qatar)

相关阅读