#spring-boot #jar #aop
Вопрос:
Я создал файл jar для автоматического ведения журнала с помощью spring boot и AOP, теперь я добавил jar в другой проект spring boot, и jar добавлен в зависимость maven, но он ничего не регистрирует.
Я беру базовое имя пакета из файлов свойств и обращаюсь к нему с помощью конфигурации xml в своем проекте AOP(jar, который я создал).
вот код AOP
@Aspect
@Component
public class LoggingAdvice {
private LogDetails logDetails = new LogDetails();
Logger log = LoggerFactory.getLogger(LoggingAdvice.class);
public Object logger(ProceedingJoinPoint pjp) throws Throwable {
ObjectMapper mapper = new ObjectMapper();
Instant start = Instant.now();
Object[] array = pjp.getArgs();
Object object = pjp.proceed();
Instant end = Instant.now();
long timeTaken = Duration.between(start, end).toMillis();
logDetails.setServiceName(pjp.getSignature().getName());
logDetails.setTimeStamp(new SimpleDateFormat("mm:ss:SSS").format(new Date(timeTaken)));
logDetails.setMessage(pjp.getTarget().getClass().toString() ", Method:-> " pjp.getSignature().getName()
", Arguments:-> " mapper.writeValueAsString(array));
log.info(mapper.writeValueAsString(logDetails));
return object;
}
}
Это xml-файл, в котором я получаю базовый пакет из файла свойств
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="LoggingAdvice"
class="com.cerner.generic.logger.advice.LoggingAdvice"></bean>
<aop:config>
<aop:aspect id="logallaspect" ref="LoggingAdvice">
<!-- @Around -->
<aop:pointcut id="logAllMethodsAround"
expression="within(${base.package}..*)" />
<aop:around method="logger"
pointcut-ref="logAllMethodsAround" />
<!-- @After-Throwing -->
<aop:after-throwing
pointcut-ref="logAllMethodsAround" throwing="e"
method="afterThrowing" />
</aop:aspect>
</aop:config>
</beans>
И вот как добавили эту банку в другой проект, в основном она должна производить журналы, но она не производит.
<dependency>
<groupId>com.cerner.generic</groupId>
<artifactId>logger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
Комментарии:
1. Вы подтвердили, что
LoggingAdvice
боб создается ?2. да, советы по ведению журнала отлично работают сами по себе, но после включения его в качестве jar в другое приложение он не ведет журнал
3. После добавления в качестве зависимости подтвердите
LoggingAdvice
, регистрируется ли компонент в контексте приложения.4. И как это сделать?
5. Это то, что вы должны решить в первую очередь . Вам необходимо зарегистрировать компонент
LoggingAdvice
как компонент в контексте приложения . Либо с помощьюComponentScan
, либо другими способами
Ответ №1:
Я зарегистрировал компонент LoggingAdvice, как предложил Р. Г. в комментариях выше. Вот небольшая модификация, которую я сделал.
@SpringBootApplication(scanBasePackages =
{"basePackageOfPatientApplication", "basePackageOfLoggingAdvice"}
)
public class PatientApplication {
public static void main(String[] args) {
SpringApplication.run(PatientApplication.class, args);
}
}
И это сработало для меня!!