侧边栏壁纸
  • 累计撰写 49 篇文章
  • 累计创建 23 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SpringBoot自动配置

阿砖
2024-08-04 / 0 评论 / 0 点赞 / 123 阅读 / 6309 字

在多模块项目中,我们需要给业务解耦例如:短信,邮件,定时任务等功能需要独立于主业务模块来实现。这时候我们使用 @AutoConfiguration 注解来自动加载我们的功能是一个很好的方式。

万事起于 Hello World,所以我也来写一个示例程序。更好的观察一下这个注解的用法。

我们先去 https://start.spring.io/ 上创建一个 SpringBoot 3.x 基础项目,不需要添加任何的依赖。下载之后删除项目中的 src 目录,修改根 pom.xmlpackagingpom 模式。 给项目创建两个模块用来区分主模块和其他业务的模块 。最后修改完成结构如下。

我在 platform-common 的模块中创建了一个 platform-common-auto-plan 的模块用来测试这个注解。这时候项目的根 pom.xml 类似下面这样的

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.runbrick</groupId>
    <artifactId>spring-boot-vue-platform</artifactId>
    <version>${revision}</version>

    <packaging>pom</packaging>
    <name>spring-boot-vue-platform</name>

    <modules>
        <module>platform-admin</module>
        <module>platform-common</module>
    </modules>

    <properties>
        <!--自 Maven 3.5.0-beta-1 开始可以使用 revision 同意版本号 只能命名成revision,不可以更改成其他命名;-->
        <revision>1.0.0</revision>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>3.0.2</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    ... 忽略build的内容

</project>

在 platform-common-auto-plan 中开始实现这个自动配置的功能。在 platform-common-auto-plan 项目的 pom.xml 中添加一个依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>

项目中添加一个 AutoPlanTestConfig.java 文件用来实现自动配置。

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
// 这个注解是用来在 application.yml 中配置 auto-plan.enabled = true 才生效
// 不然是不会加载成功的,这样可以在有一些特殊需要的模块中增加定制化
@ConditionalOnProperty(prefix = "auto-plan", name = "enabled", havingValue = "true")
public class AutoPlanTestConfig {

    @Bean
    public void planTest() {
        System.out.println("这是一个 AutoConfiguration 的测试包,当看到这个证明测试启动成功");
    }
}

在 platform-common-auto-plan 的 resources 中添加 META-INF\spring 目录,在该目录中创建 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,这是 SpringBoot 2.7.0 之后新添加的,3.x 推荐使用这个来代替 spring.factories 在文件中添加上刚才的 AutoPlanTestConfig 。

com.runbrick.common.auto.plan.config.AutoPlanTestConfig

将该 module 的依赖放入 platform-admin 的 pom.xml 中。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.runbrick</groupId>
        <artifactId>spring-boot-vue-platform</artifactId>
        <version>${revision}</version>
    </parent>

    <artifactId>platform-admin</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.runbrick</groupId>
            <artifactId>platform-common-auto-plan</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

</project>

将刚才的 auto-plan.enabled = true 加入 application.yml 中

auto-plan:
  enabled: true

此时启动 PlatformApplication 即可看到已经加载成功了。

0

评论区