#StackBounty: #spring How to make advice in Spring & aspectJ

Bounty: 50

I tried to create Pointcut & advice for annotation Scheduled and public methods in com.example package, but it doesnt work. When I tryed to call services in com.example, advice doesnt work. Also for annotation @Scheduled it doesnt work. I try to read documentation, it seems that it should work, but in reality it doesnt work. Can please someone give me a point, how to solve this issue.

package com.dhl.common.logging;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

import java.net.InetAddress;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@Aspect
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LoggingAspect {
    private static final String DATE_FORMATTER= "MMM dd, yyyy'T'HH:mm:ss.SSS";
    public static final String LOG_LEVEL_KEY = "LOG_LEVEL";
    public static final String APP_NAME_KEY = "APP_NAME";
    public static final String LOGGER_CLASS_NAME_KEY = "LOGGER_CLASS_NAME";
    public static final String SERVER_NAME_KEY = "SERVER_NAME";
    public static final String FORMATED_TIME_KEY = "FORMATED_TIME";
    public static final String ENVIROMENT_KEY = "ENVIROMENT";
    public static final String DISTRIBUTE_TRACE_ID_KEY = "DISTRIBUTE_TRACE_ID";

    @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
    private void scheduled() {}

    @Pointcut("within(com.example..*)")
    private void service() {}


    @Around("scheduled() && service()")
    public Object connectionAdvice(ProceedingJoinPoint joinPoint) throws Throwable {

        MDC.put(LOG_LEVEL_KEY, "INFO");
        MDC.put(APP_NAME_KEY, "CRDB");
        MDC.put(LOGGER_CLASS_NAME_KEY, joinPoint.getSourceLocation().getWithinType().toString());
        String serverName = InetAddress.getLocalHost().getHostName();
        MDC.put(SERVER_NAME_KEY, serverName);
        MDC.put(FORMATED_TIME_KEY, getFormatedTime());

        if(serverName != null) {
            if(serverName.toUpperCase().contains("LOCALHOST")) {
               MDC.put(ENVIROMENT_KEY,"LOCALHOST");
            } else if(serverName.toUpperCase().contains("TEST")) {
               MDC.put(ENVIROMENT_KEY,"TEST");
            } else if(serverName.toUpperCase().contains("UAT")) {
               MDC.put(ENVIROMENT_KEY,"UAT");
            } else {
                MDC.put(ENVIROMENT_KEY,"PRODUCTION");
            }
        }
        MDC.put(DISTRIBUTE_TRACE_ID_KEY, UUID.randomUUID().toString());

        try {
            return joinPoint.proceed();
        }
        finally {
            // Might as well clear all the MDC, not just the "myId"
            MDC.clear();
        }
    }

    private String getFormatedTime() {
        LocalDateTime localDateTime = LocalDateTime.now(); //get current date time

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMATTER);
        String formatDateTime = localDateTime.format(formatter);

        return formatDateTime;
    }

}


Get this bounty!!!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.