Spring自定义配置属性类

以一个minio的配置类为例

首先,由于minio模块被很多微服务需要,因此封装了一个starter,当背的微服务需要的时候就进行引入。
以下是starter模块的结构图
在这里插入图片描述

一、spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.heima.file.service.impl.MinIOFileStorageService

这行配置的意思是:

  • org.springframework.boot.autoconfigure.EnableAutoConfiguration 是一个键,用于标识这是一个自动配置类的注册条目。
  • com.heima.file.service.impl.MinIOFileStorageService 是一个自动配置类的全限定名,它应该用 @Configuration 注解标记,并且可能包含用 @Bean 注解标记的方法来定义一些 Bean。

当 Spring Boot 应用程序启动时,如果 spring.factories 文件中列出的类存在于类路径上,Spring Boot 的自动配置机制会激活这个类,并将其作为应用程序上下文的一部分。在这个例子中,如果 com.heima.file.service.impl.MinIOFileStorageService 类存在,Spring Boot 将加载它,并根据类中定义的 Bean 和条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等)来配置应用程序。

二、核心注解

1. @Import

在 Spring 框架中,@Import 注解用于将额外的类导入到当前上下文中,使得这些类能够被 Spring 上下文管理,例如创建 Bean 或进行依赖注入。当你在一个 Spring 组件(如 @Service、@Component 或 @Configuration 类)上使用 @Import 注解时,你指明的类会被 Spring 容器处理,就像它们在 XML 配置文件中或 @Configuration 类中用 @Bean 方法显式声明的一样。
由于MinIOFileStorageService被spring加载,因此MinIOConfig也会被加载。

@Slf4j
@Import(MinIOConfig.class)
public class MinIOFileStorageService implements FileStorageService {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinIOConfigProperties minIOConfigProperties;private final static String separator = "/";......
}

2. @EnableConfigurationProperties

@Data
@Configuration
@EnableConfigurationProperties({MinIOConfigProperties.class})
//当引入FileStorageService接口时
//@ConditionalOnClass(FileStorageService.class)
public class MinIOConfig {@Autowiredprivate MinIOConfigProperties minIOConfigProperties;@Beanpublic MinioClient buildMinioClient(){return MinioClient.builder().credentials(minIOConfigProperties.getAccessKey(), minIOConfigProperties.getSecretKey()).endpoint(minIOConfigProperties.getEndpoint()).build();}
}

3. @ConfigurationProperties

@Data
@ConfigurationProperties(prefix = "minio")  // 文件上传 配置前缀file.oss
public class MinIOConfigProperties implements Serializable {private String accessKey;private String secretKey;private String bucket;private String endpoint;private String readPath;
}

4. 也可以不用上面的注解,用@Value代替@ConfigurationProperties

@Configuration
public class Tess4jConfig {@Value("${test4j.datapath:null}")private String test4jDatapath;@Value("${test4j.language:null}")private String language;@Beanpublic ITesseract iTesseract(){ITesseract iTesseract = new Tesseract();iTesseract.setDatapath(test4jDatapath);iTesseract.setLanguage(language);return iTesseract;}
}

三、其它微服务引入模块

  1. 导入模块
<dependency><groupId>com.heima</groupId><artifactId>heima-file-starter</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
  1. bootstrap.yml增加配置属性
minio:accessKey: miniosecretKey: minio123bucket: leadnewsendpoint: http://192.168.200.131:9000readPath: http://192.168.200.131:9000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679852.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能BI平台(后端)-- 项目介绍

文章目录 项目介绍需求分析基础架构图优化架构图技术栈 开个新坑&#xff0c;预计时间不会很长 项目介绍 BI商业智能&#xff1a;数据可视化&#xff0c;报表可视化系统 主流BI&#xff1a;帆软BI&#xff0c;小马BI&#xff0c;微软 Power BI 传统BI&#xff1a;[查看传统 BI…

VMware 虚拟机自定义规范 - 更优雅的虚拟机开局

介绍 虚拟机自定义规范可以在你克隆虚拟机的时候在vCenter 的Web界面设定虚拟机的主机名、单/多网卡IP的IP和网关、DNS服务器、唯一标识符重置&#xff08;SID等&#xff09;、硬盘分区自动扩容、设定密码、密钥、时区等信息。 让管理员不需要进入虚拟机系统内部进行配置&…

使用 scrapyd 部署 scrapy

1.scrapyd 是什么&#xff1f; Scrapyd 是一个用于部署和运行 Scrapy 爬虫项目的服务器应用程序。它使得你可以通过 HTTP 命令来部署、管理和执行多个 Scrapy 爬虫&#xff0c;非常适合持续集成和生产环境中的爬虫部署。 2.安装scrapyd 并使用 2.1 安装 scrapyd F:\scrapydTes…

AI实景模型无人自动直播助手.减少商家在短视频线上卖货的成本,开启无人直播新时代!

在互联网时代&#xff0c;直播已经成为信息传播的主流方式&#xff0c;尤其是在年轻人中&#xff0c;直播更是备受追捧。然而&#xff0c;对于许多想要尝试直播的人来说&#xff0c;缺乏合适的主播可能成为一大障碍。那么&#xff0c;面对这一难题&#xff0c;如何实现手机无人…

无刷电机和有刷电机的区别

无刷电机和有刷电机的区别 无刷电机的定子上绕着线圈&#xff0c;线圈通常是成对出现的&#xff0c;通过控制电路为每一对线圈按照一定顺序输入电流&#xff0c;就可以产生旋转的磁场 它还有一个永磁体转子&#xff0c;现在多采用高磁能级的稀土铷铁硼材料&#xff0c;体积更小…

钉钉开放平台创建企业内部H5微应用或者小程序

前言&#xff1a; 在当今企业数字化转型的浪潮中&#xff0c;创建企业内部H5微应用或小程序已成为提升工作效率和促进内部沟通的重要举措。发话不多说本文将介绍如何利用钉钉平台快速创建这些应用&#xff0c;让企业内部的工作更加便捷高效。 步骤 1.在浏览器打开链接…

Linux中每当执行‘mount’命令(或其他命令)时,自动激活执行脚本:输入密码,才可以执行mount

要实现这个功能&#xff0c;可以通过创建一个自定义的mount命令的包装器&#xff08;wrapper&#xff09;来完成。这个包装器脚本会首先提示用户输入密码&#xff0c;如果密码正确&#xff0c;则执行实际的mount命令。以下是创建这样一个包装器的步骤&#xff1a; 创建一个名为…

2024.5.12 机器学习周报

引言 Abstract 文献阅读 1、题目 Deep High-Resolution Representation Learning for Human Pose Estimation 2、引言 在本文中&#xff0c;我们感兴趣的是人类姿态估计问题&#xff0c;重点是学习可靠的高分辨率表示。大多数现有的方法从由高到低分辨率网络产生的低分辨…

pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步

pdf2htmlEX&#xff1a;pdf 转 html&#xff0c;医学指南精细化处理第一步 单文件转换多文件转换 代码&#xff1a;https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker&#xff1a; docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&…

【教程】超简单!如何将“在VSCode中打开”添加到右键菜单中

按照以下步骤进行操作&#xff1a; 打开注册表编辑器&#xff1a; 按下 Win R 组合键打开运行对话框。输入 regedit 并按下 Enter 键打开注册表编辑器。 导航到适当的注册表项&#xff1a; 转到以下注册表项&#xff1a;HKEY_CLASSES_ROOT\Directory\Background\shell 创建…

Java进程排查CPU飙升方法

1. top查看CPU占用情况 # 使用top指令 top注&#xff1a; shftp按照cpu占用进行排序&#xff0c;按shiftm按照内存占用进行排序 如图&#xff1a; 2. 定位该进程的线程信息 top -Hp PID 如&#xff1a; top -Hp 10255解析&#xff1a; top&#xff1a;是一个实时的系统监视…

警情预测:天气、季节与节假日的交织影响

在预测未来七天的警情时&#xff0c;我们必须综合考虑多种因素&#xff0c;尤其是那些已知的对社会稳定具有潜在影响的警情类型&#xff0c;如交通事故、打架斗殴、赌博案件、盗窃案件以及矛盾纠纷。同时&#xff0c;不可忽视的是天气、季节和节假日等因素对警情发生概率的显著…