Популярным подходом для регистрации запросов и ответов является использование spring-aop
. Однако не рекомендуется выполнять операции, требующие высокой производительности, на spring-aop
. Это пример использования spring-aop
в вашем случае использования. Однако вместо того, чтобы каждый раз опрашивать БД для журнала запросов или ответов, лучше найти способ обрабатывать журналы пакетами, чтобы избежать накладных расходов на доступ к БД.
Добавьте spring-boot-starter-aop
зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Включить AspectJAutoproxy
для приложения пружины
@SpringBootApplication( )
@EnableAspectJAutoProxy( proxyTargetClass = true )
public class Application
{
public static void main( String[] args )
{
SpringApplication.run( Application.class, args );
}
}
Добавить класс аспекта
@Aspect
@Component
public class CalculatorAspect
{
private Logger LOGGER = Logger.getLogger( getClass().getName() );
@Around( "execution(* com.example.Calculator.add(..))" ) // Add method
public Object logInfoAboutAddOperation( ProceedingJoinPoint joinPoint ) throws Throwable
{
// Log here for request using joinPoint variable information
// and add the necessary entries to DB
Object proceed = joinPoint.proceed(); // This instructs the target to proceed with method execution which is the add() method
// Log here for response and add the necessary info to DB
return proceed; // This is mandatory and this contains the result of add() method. You can even change the actual result here
}
}
Это можно сделать различными способами в соответствии с вашими требованиями. Пожалуйста, посмотрите эту ссылку для получения дополнительной информации о spring-aop
. Используя соответствующий Advice
, вы также можете регистрировать запросы и ответы на уровне Controller
.