Java SpringBoot自定义starter详解

当我们使用SpringBoot时,很多时候我们需要在项目中引入许多常用的依赖,这些依赖之间可能会存在依赖关系,我们需要维护它们的版本,非常麻烦。为了解决这个问题,SpringBoot提供了Starter的机制,它可以封装依赖的版本等信息,方便我们统一使用。

在本文中,我将详细介绍Java SpringBoot自定义Starter的过程,让你可以轻松创建自己的Starter。

一、什么是SpringBoot Starter

SpringBoot Starter是用来简化SpringBoot应用的依赖引用的一种方式,通常一个SpringBoot Starter都包含了一组关于某个功能的依赖,如SpringBoot Starter Web是一个提供了常用Web依赖的Starter。

除了依赖管理之外,自定义Starter还可以提供一些自定义的配置,简化业务开发。

二、创建SpringBoot Starter的步骤

1. 创建一个空的Maven工程

在Maven工程中,创建一个空的module,命名为xxx-spring-boot-starter,其中xxx为自定义Starter的名称,比如mybatis

2. 引入相关依赖

在pom.xml中引入以下的依赖:

<dependencies>
    <!-- SpringBoot依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>${springboot.version}</version>
    </dependency>

    <!-- 自定义Starter的依赖,这里以mybatis为例 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
</dependencies>

在上面的依赖中,spring-boot-autoconfigure是必须要引入的,这个依赖提供了自动配置机制的基本实现。

3. 创建自动配置类

在src/main/java目录下创建一个自动配置类,命名为XxxAutoConfiguration,其中Xxx为自定义Starter的名称,比如Mybatis

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@EnableConfigurationProperties(MapperProperties.class)
public class MybatisAutoConfiguration {

    private final MapperProperties mapperProperties;

    public MybatisAutoConfiguration(MapperProperties mapperProperties) {
        this.mapperProperties = mapperProperties;
    }

    @Bean
    @ConditionalOnMissingBean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        factory.setDataSource(dataSource);
        if (StringUtils.hasText(this.mapperProperties.getConfigLocation())) {
            factory.setConfigLocation(new DefaultResourceLoader().getResource(
                    this.mapperProperties.getConfigLocation()));
        }
        return factory.getObject();
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        configurer.setBasePackage(this.mapperProperties.getBasePackage());
        return configurer;
    }

}

在上面的配置类中,我们使用了SpringBoot自动配置机制提供的注解:

  • @Configuration:表明这个类是一个配置类。
  • @ConditionalOnClass:表示只有当classpath下存在指定的类时,才会创建这个配置类。
  • @EnableConfigurationProperties:激活@ConfigurationProperties的作用。

4. 创建Starter配置类

在src/main/java目录下,创建一个配置类,命名为XxxProperties,其中Xxx为自定义Starter的名称,比如Mybatis

@ConfigurationProperties(prefix = "mybatis")
public class MybatisProperties {

    private static final String DEFAULT_CONFIG_LOCATION = "classpath:mybatis-config.xml";

    /**
     * Mybatis配置文件的路径,默认为classpath:mybatis-config.xml
     */
    private String configLocation = DEFAULT_CONFIG_LOCATION;

    /**
     * Mybatis映射文件的路径,多个使用逗号分隔
     */
    private String mapperLocations;


    /**
     * Mapper接口所在包,多个使用逗号分隔
     */
    private String basePackage;


    /**
     * Configuration custom.
     */
    private Configuration configuration;
}

这个配置类用来指定自定义Starter的一些配置。其中@ConfigurationProperties注解指定了这个配置类的前缀为mybatis,也就是说在application.yml中如下配置就会映射到这个配置类中:

mybatis:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mappers/**/*.xml
  base-package: com.xxx.mapper

5. 创建Starter类

在src/main/java目录下,创建一个Starter类,命名为XxxStarter,其中Xxx为自定义Starter的名称,比如Mybatis

@Configuration
@EnableConfigurationProperties(MybatisProperties.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisStarter {

    @Bean
    public MybatisAutoConfiguration mybatisAutoConfiguration(MybatisProperties mybatisProperties) {
        return new MybatisAutoConfiguration(mybatisProperties);
    }

}

在上面的Starter类中,我们使用了SpringBoot自动配置机制提供的注解:

  • @Configuration:表明这个类是一个配置类。
  • @EnableConfigurationProperties:激活@ConfigurationProperties的作用。
  • @ConditionalOnClass:表示只有当classpath下存在指定的类时,才会创建这个Starter类。
  • @AutoConfigureAfter:表示在某个配置类之后再进行自动配置。

6. 打包并安装

完成以上五个步骤之后,通过mvn clean install 命令将自定义的Starter打包并安装到本地Maven仓库。

三、使用自定义Starter

完成自定义Starter的创建之后,就可以在项目中直接使用了。只需要在项目的pom.xml中引入自定义Starter的依赖即可,在以mybatis为例的项目中,只需在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

这里的com.xxx为自定义Starter打包时的groupId。

使用自定义Starter启动的时候,可以在application.yml文件中进行配置:

mybatis:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mappers/**/*.xml
  base-package: com.xxx.mapper

四、自定义Starter的示例

1. Mybatis Starter

Mybatis Starter是一个提供了常用Mybatis依赖的Starter,在使用的时候,只需要引入以下依赖,就可以方便的使用Mybatis了:

<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

同时,在application.yml文件中可以进行Mybatis的配置:

mybatis:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mappers/**/*.xml
  base-package: com.xxx.mapper

2. Redis Starter

Redis Starter是一个提供了常用Redis依赖的Starter,在使用的时候,只需要引入以下依赖,就可以方便的使用Redis了:

<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>redis-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

同时,在application.yml文件中可以进行Redis的配置:

spring:
  redis:
    host: localhost
    port: 6379
    database: 0

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SpringBoot自定义starter详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • javascript中this的用法实践分析

    JavaScript中this的用法实践分析 在JavaScript中使用this是一个常见的问题,它可以在不同的情况下指向不同的变量。因此,在编写JavaScript代码时,正确地理解并使用this非常重要。 什么是this this是一个关键字,它表示当前执行代码的对象。但它不是常规的变量,而是在函数被调用时才被赋值。也就是说,this关键字在程序运行时…

    Java 2023年5月26日
    00
  • jsp+servlet实现简单登录页面功能(附demo)

    那我就来详细讲解一下“jsp+servlet实现简单登录页面功能(附demo)”的完整攻略。 首先,要了解jsp和servlet的基本概念和用途,jsp主要用于前端页面的展示,servlet主要用于处理后端的业务逻辑和数据交互。在这里,我们需要用到jsp和servlet的合作来实现登录页面功能。 下面我们来分步骤介绍: 步骤一:搭建开发环境 1. 安装JDK…

    Java 2023年6月15日
    00
  • Java 基础之NIO 学习详解

    Java 基础之NIO 学习详解 简述 NIO,全称为“New IO”,是Java 1.4 引入的一套用于更高效的 I/O 操作的API。NIO主要包括以下三个核心组件:Channel、Buffer 和 Selector。其中,Channel 和 Buffer 主要用于底层数据传输,Selector 则用于监听 Channel 上的 IO 事件。 NIO 与…

    Java 2023年5月26日
    00
  • Java日常练习题,每天进步一点点(23)

    “Java日常练习题,每天进步一点点(23)”是一篇Java编程练习题,是供Java初学者练习和巩固知识的。本篇练习题主要涉及字符串处理和逻辑运算符的应用。接下来,我将对这篇练习题进行详细讲解。 题目大意 本篇练习题共有两道小题: 第一题 将一个字符串中的所有小写字母转换成大写字母,将所有的大写字母转换成小写字母。 第二题 输入两个数a和b,判断a能否被b整…

    Java 2023年5月26日
    00
  • Hibernate+JDBC实现批量插入、更新及删除的方法详解

    Hibernate+JDBC实现批量插入、更新及删除的方法详解 本文将介绍如何使用Hibernate+JDBC实现批量插入、更新及删除数据的方法。 数据库连接 首先,我们需要在Hibernate的配置文件中配置数据库连接信息,以便在后续操作中使用: <property name="hibernate.connection.driver_cla…

    Java 2023年5月20日
    00
  • C#编程自学之开篇介绍

    C#编程自学之开篇介绍 本文将为大家介绍如何通过自学的方式学习C#编程语言。C#是一种面向对象的程序设计语言,它主要用于开发Windows桌面应用程序、Web应用程序、游戏、移动应用程序等应用领域。相信大家在学习C#编程过程中会遇到各种各样的问题,如何处理这些问题是自学过程中最关键的一点。 确定学习C#编程的目的和方向 在开始自学之前,首先需要明确自己想要学…

    Java 2023年5月23日
    00
  • Tomcat 启动错误(8080端口被占用)处理方法

    这里是针对Tomcat启动错误(8080端口被占用)处理的完整攻略。请按以下步骤操作: 1. 查找占用8080端口的进程 打开终端或命令提示符,输入以下命令: Windows netstat -ano | findstr 8080 MacOS/Linux sudo lsof -i :8080 以上命令会列出占用8080端口的进程PID。例如: TCP 127…

    Java 2023年5月19日
    00
  • js版本A*寻路算法

    JS版本A*寻路算法 A(A-Star)算法是一种常用的路径搜索算法,它在寻找从起点到终点的最短路径过程中,会通过改进Dijkstra算法来提高效率。JS版本A寻路算法用于在网页游戏等应用场景下,帮助角色格子图中找到最短路径。 算法流程 创建一个空的开放列表列表(OPEN)和一个空的封闭列表(CLOSED) 把起始点作为当前点加入到OPEN列表中 循环执行以…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部