Как я могу использовать свою собственную зависимость от jar ceated в другом проекте spring boot

#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);
    }
}
 

И это сработало для меня!!