spring.factories 的基本使用

spring.factories 的基本作用

在若依-微服务版的源码学习中,发现项目中多次用到了 spring.factories 。因此记录一下自己的学习总结:
参考博客:

  • spring.factories 的具体原理可以参考:https://www.jianshu.com/p/00e49c607fa1

  • spring.factories 的基本作用可以参考:https://www.cnblogs.com/huanghzm/p/12217630.html

前提:

在微服务项目中,存在这多个不同的子模块,这些子模块可能是一个独立的Spring Boot 项目,也可能是普通的maven项目。

问题提出:

我们通常有这么一种需求,将多个子模块都可能用到的组件从单个子模块中抽离出来组成一个公共模块。比如将所有子模块的接口抽离,抽离出来的公共部分也可能存在着需要注入 spring 容器中的组件。

那么这样就引出了一个新的问题。我们都知道 Spring Boot的自动扫描包的扫描范围是 SpringBootApplication启动类所在的包以及子包目录下。那么我们抽离出来的公共部分在 SpringBoot 项目启动时就不可能会被自动扫包。

问题解决:

  1. SpringBootApplication启动类中添加 @import 注解。
  2. 使用 spring.factories

主要介绍 spring.factories

spring.factories文件需要创建在 resources/META-INF路径下。

main
|-- resources
|     └- META-INF
|         └-- spring.factories

spring.factories文件是通过 Properties 解析得到的,所以文件内容格式通常是安装以下方式:

com.xxx.interface=com.xxx.classname

如果一个接口希望配置多个实现类,可以使用 ", "进行分割。

在若依-微服务版中同样是通过 spring.factories解决:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.ruoyi.system.api.factory.RemoteUserFallbackFactory,\
  com.ruoyi.system.api.factory.RemoteLogFallbackFactory, \
  com.ruoyi.system.api.factory.RemoteFileFallbackFactory

通过 spring.factories文件的方式,在启动服务时(启动SpringBoot项目)只要引入的包即可实现第三方组件自动扫包。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
非常好,您已经掌握了自定义Spring Boot启动器的基本流程。接下来,我将详细介绍如何使用自定义启动器来自动配置Druid数据源。 1. 创建启动器项目 首先,您需要创建一个新的Maven项目作为启动器项目。在该项目中,您需要定义自己的命名空间,以及您要自动配置的组件(例如Druid数据源)。 2. 添加启动器相关依赖 在启动器项目的pom.xml文件中,您需要添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 这两个依赖项都是必需的。`spring-boot-starter`提供了Spring Boot的所有基本功能,`druid-spring-boot-starter`则提供了Druid数据源的自动配置功能。 3. 创建属性配置类 在启动器项目中,您需要创建一个属性配置类,用于定义Druid数据源的配置属性。例如,您可以创建一个名为`DruidDataSourceProperties`的类,并添加以下属性: ```java @ConfigurationProperties(prefix = "my.druid.datasource") public class DruidDataSourceProperties { private String url; private String username; private String password; // 其他属性... // getter和setter... } ``` 在这里,我们使用了`@ConfigurationProperties`注解,指定了属性的前缀为`my.druid.datasource`,以便在配置文件中进行配置。 4. 创建自动配置类 现在,您可以创建Druid数据源的自动配置类。例如,您可以创建一个名为`DruidDataSourceAutoConfiguration`的类,并使用`@ConditionalOnClass`注解来检查Druid的类是否存在: ```java @Configuration @ConditionalOnClass(DruidDataSource.class) @EnableConfigurationProperties(DruidDataSourceProperties.class) public class DruidDataSourceAutoConfiguration { @Bean @ConfigurationProperties(prefix = "my.druid.datasource") public DataSource dataSource(DruidDataSourceProperties properties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); // 其他属性设置... return dataSource; } } ``` 在这里,我们使用了`@ConditionalOnClass`注解,以检查Druid数据源的类是否存在。如果存在,就会启用自动配置。同时,我们使用了`@EnableConfigurationProperties`注解,以启用属性配置类。 5. 编写自动配置文件(spring.factories) 最后,您需要在META-INF目录下创建一个名为`spring.factories`的文件,用于声明您的自动配置类。例如: ``` org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.DruidDataSourceAutoConfiguration ``` 在这里,我们声明了一个名为`com.example.DruidDataSourceAutoConfiguration`的自动配置类。 6. 使用自定义的启动器 现在,您可以在其他Spring Boot项目中使用您的自定义启动器了。只需按照以下步骤进行操作: 1. 将您的启动器项目打包,并将其安装到本地Maven仓库中。 2. 在其他Spring Boot项目中,添加以下依赖项: ```xml <dependency> <groupId>com.example</groupId> <artifactId>my-spring-boot-starter</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> ``` 在这里,`com.example`是您的启动器项目的groupId,`my-spring-boot-starter`是您的启动器项目的artifactId。 3. 在配置文件中,添加以下属性: ```properties my.druid.datasource.url=jdbc:mysql://localhost:3306/mydb my.druid.datasource.username=root my.druid.datasource.password=123456 ``` 在这里,`my.druid.datasource`是您在属性配置类中定义的属性前缀。 现在,您的Spring Boot项目就可以自动配置Druid数据源了。您可以在应用程序中注入DataSource类型的bean,并使用它来访问数据库。例如: ```java @Autowired private DataSource dataSource; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值