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

自定义日志打成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
    

相关文章:

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

背景:写了一个请求响应日志包,打包后在另一个项目使用pom引入后不生效 package com.example.qqllog.aspect;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean;…...

RK3568平台开发系列讲解(中断篇)延迟工作实验

🚀返回专栏总目录 文章目录 一、什么是延迟工作二、 struct delayed_work三、延迟工作相关接口函数3.1、初始化延迟工作函数3.2、调度/取消调度 延迟工作函数四、驱动程序编写沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是延迟工作 延迟工作是一种将工作的执…...

RabbitMQ 的集群

大家好,我是锋哥。今天分享关于【RabbitMQ 的集群】面试题?希望对大家有帮助; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理,广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大,单一的 RabbitMQ 实…...

整车功能架构 --- 智能座舱

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧…...

java stream流的使用

Java中的Stream API是Java 8引入的一个重要特性,它提供了对集合对象进行各种非常便利、高效的聚合操作(aggregate operation)或大批量数据操作(bulk data operation)。Stream API借助于Lambda表达式,极大地…...

(JVM)带你一起研究JVM的语法糖功能 和 JVM的即时编译器

1. 语法糖 所谓的语法糖,其实就是指java编译器把*.java源码编译为*.class字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是java编译器给我们第一个额外福利 以下代码的分析,借助了javap工具…...

【Linux】ClickHouse 部署

搭建Clickhouse集群时,需要使用Zookeeper去实现集群副本之间的同步,所以需要先搭建zookeeper集群 1、卸载 # 检查有哪些clickhouse依赖包: [rootlocalhost ~]# yum list installed | grep clickhouse# 移除依赖包: [rootlocalho…...

js的小知识

以下是一些 JavaScript 的小知识点,适合不同水平的开发者: 1. 变量声明 使用 let、const 和 var 声明变量。let 和 const 块级作用域,而 var 是函数作用域。const 声明的变量不可重新赋值,但对象的属性仍然可以修改。 2. 箭头函…...

一些swift问题

写得比较快,如果有问题请私信。 序列化和反序列化 反序列化的jsonString2只是给定的任意json字符串 private func p_testDecodeTable() {let arr ["recordID123456", "recordID2"]// 序列化[string] -> json datalet jsonData try? JSO…...

Nginx安装配置详解

Nginx Nginx官网 Tengine翻译的Nginx中文文档 轻量级的Web服务器,主要有反向代理、负载均衡的功能。 能够支撑5万的并发量,运行时内存和CPU占用低,配置简单,运行稳定。 写在前 uWSGI与Nginx的关系 1. 安装 Windows 官网 Stabl…...

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车,搭载G4ED 发动机,累计行驶里程约为17.2万km。车主反映,车辆行驶正常,但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试,车速表、燃油存量表及发动机冷却温度…...

在ubuntu上安装最新版的clang

方法一&#xff1a; 执行如下的命令&#xff1a; # 下载安装脚本wget https://apt.llvm.org/llvm.sh chmod x llvm.sh # 开始下载&#xff0c; 输入需要安装的版本号。 sudo ./llvm.sh <version number>方法二 添加软件下载源。 请根据自己的Ubuntu系统版本添加&…...

使用Django REST framework构建RESTful API

使用Django REST framework构建RESTful API Django REST framework简介 安装Django REST framework 创建Django项目 创建Django应用 配置Django项目 创建模型 迁移数据库 创建序列化器 创建视图 配置URL 配置全局URL 配置认证和权限 测试API 使用Postman测试API 分页 过滤和排序…...

「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件

在鸿蒙开发中,Toggle 和 Checkbox 是常用的交互组件,分别用于实现开关切换和多项选择。Toggle 提供多种类型以适应不同场景,而 Checkbox 支持自定义样式及事件回调。本篇将详细介绍这两个组件的基本用法,并通过实战展示它们的组合应用。 关键词 Toggle 组件Checkbox 组件开…...

Kotlin协程suspend的理解

suspend修饰符&#xff0c;它可以告诉编译器&#xff0c;该函数需要在协程中执行。作为开发者&#xff0c;您可以把挂起函数看作是普通函数&#xff0c;只不过它可能会在某些时刻挂起和恢复而已。协程的挂起就是退出方法&#xff0c;等到一定条件到来会重新执行这个方法&#x…...

基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发

在中医针灸的传统治疗中&#xff0c;穴位取穴的精确度对于治疗效果至关重要。然而&#xff0c;传统的定位方法&#xff0c;如体表标志法、骨度折量法和指寸法&#xff0c;由于观察角度、个体差异&#xff08;如人体姿态和皮肤纹理&#xff09;以及环境因素的干扰&#xff0c;往…...

51单片机教程(二)- 创建项目

1 创建项目 创建项目存储文件夹&#xff1a;C51Project 打开Keil5软件&#xff0c;选择 Project -> New uVision Project&#xff1a; 选择项目路径&#xff0c;即刚才创建的文件夹 选择芯片&#xff0c;选择 Microchip&#xff08;微型集成电路&#xff09;&#xff0…...

Rust 图形界面开发——使用 GTK 创建跨平台 GUI

第五章 图形界面开发 第一节 使用 GTK 创建跨平台 GUI GTK&#xff08;GIMP Toolkit&#xff09;是一个流行的开源跨平台图形用户界面库&#xff0c;适用于创建桌面应用程序。结合 Rust 的 gtk-rs 库&#xff0c;开发者能够高效地构建现代化 GUI 应用。本节将详细探讨 GTK 的…...

Hellinger Distance(赫林格距离)

Hellinger Distance&#xff08;赫林格距离&#xff09;是一种用于衡量两个概率分布相似度的距离度量。它通常用于概率统计、信息论和机器学习中&#xff0c;以评估两个分布之间的相似性。Hellinger距离的值介于0和1之间&#xff0c;其中0表示两个分布完全相同&#xff0c;1表示…...

【系统架构设计师】七、设计模式

7.1 设计模式概述 设计经验在实践者之间日益广泛地利用&#xff0c;描述这些共同问题和解决这些问题的方案就形成了所谓的模式。 7.1.1 设计模式的历史 建筑师Christopher Alexander首先提出了模式概念&#xff0c;他将模式分为了三个部分&#xff1a; 特定的情景&#xff…...

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例

前言 useResolvedPath 是 React Router v6 提供的一个实用钩子&#xff0c;用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径&#xff0c;生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析&#xff1a;将相对…...

集成学习三种框架

集成学习通过组合多个弱学习器构建强学习器&#xff0c;常见框架包括Bagging&#xff08;装袋&#xff09;、Boosting&#xff08;提升&#xff09; 和Stacking&#xff08;堆叠&#xff09; 一、Bagging&#xff08;自助装袋法&#xff09; 核心思想 从原始数据中通过有放回…...

惠普HP Deskjet 9600 打印机信息

基本参数 产品定位&#xff1a;彩色喷墨打印机。打印速度&#xff1a;14 页 / 分钟。最高分辨率&#xff1a;48001200dpi。打印内存&#xff1a;8MB4。打印语言&#xff1a;HP PCL 3 增强型。打印负荷&#xff1a;每月 5000 页。接口类型&#xff1a;USB、并口。 功能特点 自动…...

第3章——SSM整合

一、整合持久层框架MyBatis 1.准备数据库表及数据 创建数据库&#xff1a;springboot 使用IDEA工具自带的mysql插件来完成表的创建和数据的准备&#xff1a; 创建表 表创建成功后&#xff0c;为表准备数据&#xff0c;如下&#xff1a; 2.创建SpringBoot项目 使用脚手架创建…...

机器学习笔记【Week7】

一、SVM的动机&#xff1a;大间隔分类器 1、逻辑回归回顾 假设函数为 sigmoid 函数&#xff1a; h θ ( x ) 1 1 e − θ T x h_\theta(x) \frac{1}{1 e^{-\theta^Tx}} hθ​(x)1e−θTx1​ 分类依据是 h θ ( x ) ≥ 0.5 h_\theta(x) \geq 0.5 hθ​(x)≥0.5 为正类&a…...

智能推荐系统:协同过滤与深度学习结合

智能推荐系统&#xff1a;协同过滤与深度学习结合 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 智能推荐系统&#xff1a;协同过滤与深度学习结合摘要引言技术原理对比1. 协同过滤算法&#xff1a;基于相似性的推…...

大二下期末

一.Numpy&#xff08;Numerical Python&#xff09; Numpy库是Python用于科学计算的基础包&#xff0c;也是大量Python数学和科学计算包的基础。不少数据处理和分析包都是在Numpy的基础上开发的&#xff0c;如后面介绍的Pandas包。 Numpy的核心基础是ndarray&#xff08;N-di…...

Kerberos面试内容整理-在 Linux/Windows 中的 Kerberos 实践

Windows 实践: 在Windows环境中,Kerberos 几乎是无形融合的。用户使用域账号登录计算机时,实际上就完成了Kerberos的AS认证并获取TGT;此后的资源访问(如共享文件夹、打印机、数据库等)都会自动使用Kerberos进行验证,而无需用户干预。Windows通过LSASS进程维护和缓存用户…...

在uni-app中如何从Options API迁移到Composition API?

uni-app 从 Options API 迁移到 Composition API 的详细指南 一、迁移前的准备 升级环境&#xff1a; 确保 HBuilderX 版本 ≥ 3.2.0项目 uni-app 版本 ≥ 3.0.0 了解 Composition API 基础&#xff1a; 响应式系统&#xff1a;ref、reactive生命周期钩子&#xff1a;onMount…...

Linux中 SONAME 的作用

🧠 一、从 -lexample 到 SONAME ✅ 假设你有以下文件结构: /libexample.so → libexample.so.1 /libexample.so.1 → libexample.so.1.0.0 /libexample.so.1.0.0 # SONAME: libexample.so.1/libexample.so.2 → libexample.so.2.0.0 /libexample.so.2.0…...