【问题标题】:How can I use my own ceated jar dependency in other spring boot project如何在其他 Spring Boot 项目中使用我自己的 ceated jar 依赖项
【发布时间】:2021-10-04 20:49:27
【问题描述】:

我已经使用spring boot和AOP创建了一个用于自动记录的jar文件,现在我已经在其他spring boot项目中添加了jar,并且jar被添加到maven依赖中,但它没有记录任何东西。

我正在从属性文件中获取基本包名称,并在我的 AOP 项目(我创建的 jar)中使用 xml 配置访问它。

这里是 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>

这就是在其他项目中添加这个jar的方式,基本上它应该产生日志,但它没有产生。

<dependency>
    <groupId>com.cerner.generic</groupId>
    <artifactId>logger</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>runtime</scope>          
</dependency>

【问题讨论】:

  • 你确认LoggingAdvice bean 是否正在创建?
  • 是的日志记录建议单独工作正常,但在将其作为 jar 包含在其他应用程序中后,它没有记录
  • 添加为依赖项后,确认LoggingAdvice bean 是否正在注册到应用程序上下文。
  • 那该怎么做?
  • 这是你首先要解决的问题。您需要将LoggingAdvice 注册为具有应用程序上下文的bean。通过ComponentScan或其他方式

标签: spring-boot jar aop


【解决方案1】:

我按照 R.G 在上述 cmets 中的建议注册了 LoggingAdvice bean。 这是我所做的小修改。

@SpringBootApplication(scanBasePackages =
  {"basePackageOfPatientApplication", "basePackageOfLoggingAdvice"}
)
public class PatientApplication {
    public static void main(String[] args) {
        SpringApplication.run(PatientApplication.class, args);
    }
}

它对我有用!

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2020-08-17
    • 2019-05-22
    • 2023-03-13
    • 1970-01-01
    • 2021-07-23
    • 2017-02-26
    相关资源
    最近更新 更多