3

Spring Boot 1.2.2 w/ Embedded Tomcat で LTW を動作させることができません。

私のアプリケーションは .JAR ファイルではなく、WAR ファイルです。DEBUGで実行すると、ポイントカットに一致するはずの呼び出しを実行しても、私の側面では停止しないため、機能していないと思います...

私の実行スクリプトはこれを行います:

-javaagent:path/to/spring-instrument-xxx.jar -javaagent:path/to/aspectjweaver-1.2.8.jar

Spring Boot では、この AOP Config を ApplicationInitializer としてロードするため、すぐに親の ApplicationContext にあり、その後の埋め込み tomcat Web アプリケーション コンテキストの残りすべてに対してそこにあるはずです。

@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
@Configuration
public class AopConfig {
    private Log log = LogFactory.getLog(AopConfig.class);

    public AopConfig() {
        log.info("Creating AopConfig");
    }

    @Bean
    public LoadTimeWeaver loadTimeWeaver() {
        log.info("Creating InstrumentationLoadTimeWeaver");
        return new InstrumentationLoadTimeWeaver();
    }
}

私のアスペクトは次のようになります。

package my.aop.profiler.MethodTimerAspect;

@Aspect
public class MethodTimerAspect {
    private static final String DELIMITER = "|";
    private static final String PROFILER = "profiler";
    private static final String DATE_FORMAT = "h:mm:ss";
    private static final Log LOG = LogFactory.getLog(PROFILER);

    public MethodTimerAspect() {}

    @Pointcut("execution (* my.web.*Controller.*(..))")
    protected void controllers() {}

    @Pointcut("execution (* my.services..*Facade.*(..))")
    protected void services() {}

    @Pointcut("execution (* my.services..*Exchange.*(..))")
    protected void data() {}

    /**
     * If profiling is enabled with trace, it will log the amount of time
     * spent in the method
     *
     * @param joinPoint
     * @return Object
     * @throws Throwable
     */
    @Around("controllers() || services() || data()")
    public Object doProfiling(ProceedingJoinPoint joinPoint) throws Throwable {
        // (...)
    }
}

私の組み込み WAR の META-INF/aop.xml は次のとおりです。

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver>
        <!-- only weave classes in our application-specific packages -->
        <include within="cdot.*"/>
    </weaver>
    <aspects>
        <!-- weave in just this aspect -->
        <aspect name="my.aop.profiler.MethodTimerAspect"/>
    </aspects>
</aspectj>
4

1 に答える 1