当前位置: 首页 > article >正文

自定义日志打成jar包引入项目后不生效

背景:写了一个请求响应日志包,打包后在另一个项目使用pom引入后不生效

package com.example.qqllog.aspect;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
public class RequestLogAutoConfiguration {
    public RequestLogAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean({RequestLogAspect.class})
    public RequestLogAspect requestLogAspect() {
        return new RequestLogAspect();
    }
}
package com.example.qqllog.aspect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SysLog {
    String value() default "";
}
package com.example.qqllog.aspect;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
public class RequestLogAutoConfiguration {
    public RequestLogAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean({RequestLogAspect.class})
    public RequestLogAspect requestLogAspect() {
        return new RequestLogAspect();
    }
}

在需要输出日志的方法上增加@SysLog注解,发现没有打印日志

原因:

默认情况下,@ComponentScan注解会扫描当前包及其所有子包中的组件。而 @SpringBootApplication 注解包含了@ComponentScan,所以 Spring Boot 框架会自动扫描 Spring Boot启动类当前包及其所有子包中的组件类。而我们的组件在jar包中不在自动扫描范围内,所以无效。

解决:

  • 在资源目录下新建目录 META-INF
  • 在 META-INF 目录下新建文件 spring.factories
  • 在文件中添加下面配置
  • org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.qqllog.aspect.RequestLogAutoConfiguration
    


http://www.kler.cn/a/377969.html

相关文章:

  • IO流篇(一、File)
  • 【Redis】一种常见的Redis分布式锁原理简述
  • 【设计模式】策略模式定义及其实现代码示例
  • 一个由Deno和React驱动的静态网站生成器
  • 全志A133 android10 LVDS幅值调节
  • CAN总线学习笔记(1、CAN总线定义)
  • 3D Gaussian Splatting 入门
  • 8.5K+ Star!Skyvern:一个基于LLMs和计算机视觉自动化浏览器工作流的工具
  • Day 41 || 1049. 最后一块石头的重量 II 、494. 目标和、474.一和零
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 数据智能驱动金融策略优化:民锋智能分析技术的应用
  • 深度学习-38-基于PyTorch的卷积神经网络AlexNet
  • 【Java笔记】1-JDK/JRE/JVM是个啥?
  • Golang | Leetcode Golang题解之第518题零钱兑换II
  • pgsql数据量大之后可能遇到的问题
  • SpringCloudAlibaba实战入门之OpenFeign高级用法(十)
  • 数据结构-二叉树中的递归
  • [每周一更]-(第121期):模拟面试|微服务架构面试思路解析
  • 虚函数和纯虚函数是 C++ 中实现多态性的关键概念
  • 【算法笔记】位运算算法原理深度剖析
  • 单向函数、单向陷门函数、困难问题
  • PHP的 CSRF、XSS 攻击和防范
  • promise的catch放在then前面的场景
  • OpenGL入门003——使用Factory设计模式简化渲染流程
  • 从零开始的c++之旅——继承
  • SMTP协议,即简单邮件传输协议