Ich bin neu bei Spring-Boot und AOP. Ich versuche, die Ausnahmen, die in meiner spring-boot
Anwendung ausgelöst werden, zu protokollieren. Was genau ich versuche zu tun ist, wann immer eine Methode in meinen Anwendungsklassen die Laufzeitausnahme auslöst, ich logge sie in die Konsole ein.spring-boot- @AfterThrowing führt keine beratungsmethode durch, obwohl eine Ausnahme ausgelöst wird?
Also habe ich einen Aspekt mit @AfterThrowing
Annotation erstellt. Um zu überprüfen, ob es funktioniert, habe ich absichtlich eine Codezeile geschrieben, die / by zero
Exception auslösen wird. Ich habe es getestet, aber diese Methode funktioniert nicht.
Es folgt mein Testcode:
package com.sware.SpringBoot_JPA_MySQL_Gradle_Project.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import com.sware.SpringBoot_JPA_MySQL_Gradle_Project.domains.User;
@Aspect
@Component
public class UserAspect {
@Before("execution(* com.sware.SpringBoot_JPA_MySQL_Gradle_Project.services.UserService.saveUserToDb(com.sware.SpringBoot_JPA_MySQL_Gradle_Project.domains.User)) && args(user)")
public void beforeUserSave(User user) {
System.out.println("++++++++++++++++++++++++++++++Creating UserBefore Pointcut: \n"+user.toString());
}
@After("execution(* com.sware.SpringBoot_JPA_MySQL_Gradle_Project.services.UserService.saveUserToDb(com.sware.SpringBoot_JPA_MySQL_Gradle_Project.domains.User)) && args(user)")
public void aftereUserSave(User user) {
System.out.println("++++++++++++++++++++++++++++++Creating User After pointcut: \n"+user.toString());
}
@AfterThrowing(pointcut = "execution(* com.sware.SpringBoot_JPA_MySQL_Gradle_Project.services.*.*(..))", throwing = "e")
public void myAfterThrowing(JoinPoint joinPoint, Throwable e) {
System.out.println("Okay - we're in the handler...");
/*Signature signature = joinPoint.getSignature();
String methodName = signature.getName();
String stuff = signature.toString();
String arguments = Arrays.toString(joinPoint.getArgs());
System.out.println("**************************EXCEPTION: "
+ methodName + " with arguments "
+ arguments + "\nand the full toString: " + stuff + "\nthe exception is: "
+ e.getMessage());*/
}
}
i mehrere Permutationen von pointcut Ausdruck wie unten versucht, aber niemand arbeitet:
@AfterThrowing(pointcut = "execution(* com.sware.SpringBoot_JPA_MySQL_Gradle_Project.services.*.*(..))", throwing = "e")
@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "e") // Application fails to start throws some internal null pointer exception
@AfterThrowing(pointcut = "execution(* com.sware.*.*.*.*(..))", throwing = "e")
Mein Klassencode:
package com.sware.SpringBoot_JPA_MySQL_Gradle_Project.services;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sware.SpringBoot_JPA_MySQL_Gradle_Project.domains.User;
import com.sware.SpringBoot_JPA_MySQL_Gradle_Project.projections.UserWithFnameAndLname;
import com.sware.SpringBoot_JPA_MySQL_Gradle_Project.repositories.UserRepository;
@Service
public class UserService {
@Autowired
UserRepository userRepository;
public List<User> getAllUsers(){
List<User> userList=new ArrayList<>();
try {
Integer n=10/0;
userList=userRepository.findAll();
} catch (Exception e) {
System.out.println("Exception in UserRepostory:"+e.getMessage());
}
return userList;
}
}
Hier, myAfterThrowing
Methode wird nicht Anruf obwohl /by zero
wird beim Ausführen ausgelöst Zeit. Kann mir jemand sagen, wo ich falsch liege?
Nicht genug Informationen - können Sie die Feder Sanitär (Anwendungs-Kontext, JavaConfig ...) – Sanj
Eigentlich benutze ich 'Spring-Boot', so dass es keine Konfiguration getan. Ich habe nur die Abhängigkeit von Großbuchstaben in build.gradle, kompilieren ("org.aspectj: aspectjweaver: 1.8.8"). Die beiden anderen "@before" - und "@after" -Positionsschnitte funktionieren einwandfrei. –
Methode wirft keine Ausnahme. Der "try-catch" -Block absorbiert grundsätzlich die Ausnahme. Move "Ganzzahl n = 10/0;" außerhalb des Try-Catch. – Sanj