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日

相关文章

  • Java 代理(Proxy)的原理及应用

    下面是Java 代理(Proxy)的原理及应用的详细攻略: 什么是Java代理? Java代理是一种为其他对象提供代理服务的模式。代理是一种中介,它在客户端和实际对象之间起到缓冲的作用,使得客户端可以通过代理来访问对象。 Java代理的核心思想是:通过代理来访问实际对象,代理可以实现对实际对象的一些控制和管理,如访问控制、数据验证、安全控制等。 Java代理…

    Java 2023年5月27日
    00
  • JVM钩子函数的使用场景详解

    当JVM进程结束时,可能存在一些资源需要释放或者状态需要保存。为了实现这样的目的,我们可以使用JVM钩子函数。 JVM钩子函数是一种回调函数,它可以在JVM进程终止前被执行。我们可以通过实现钩子函数来在程序结束时执行一些特定的操作,例如清理资源、保存状态和日志记录等。 JVM钩子函数的使用场景 通常情况下,JVM钩子函数可以用于以下场景: 清理资源 当JVM…

    Java 2023年5月26日
    00
  • Java开发之ssm三大框架整合

    Java开发中,SSM框架已成为目前主流开发框架之一。SSM即Spring+SpringMVC+Mybatis三大框架的整合运用,通过它们的结合,可以使得Java程序的开发更加高效,同时也可提高程序的扩展性与维护性。在接下来的内容中,我会详细讲解“Java开发之ssm三大框架整合”的完整攻略。 1. Spring框架 Spring是一个以IoC(控制反转)和…

    Java 2023年5月19日
    00
  • 一文搞懂Spring中的JavaConfig

    一文搞懂Spring中的JavaConfig 前言 Spring框架是一个优秀的Java开源框架,作为企业级应用必不可少的技术栈之一。Spring提供了多种方式来为我们的应用程序提供依赖注入和控制反转的支持,。本文将介绍Spring的核心组件之一——JavaConfig,它是一种用Java编写Bean定义文件的方式,可以取代传统的XML配置方式,使配置更清晰…

    Java 2023年5月20日
    00
  • 详解Spring依赖注入的三种方式使用及优缺点

    以下是详解Spring依赖注入的三种方式使用及优缺点的完整攻略: 1. Spring依赖注入的三种方式 Spring提供了三种方式来实现依赖注入: 1.1 构造器注入 构造器注入是在对象创建的时候使用构造函数来进行注入。在XML配置文件中,我们可以使用标签对构造函数中需要的参数进行赋值。使用构造器注入的优点是在对象创建时就可以将所有的依赖注入,避免了后期在运…

    Java 2023年5月19日
    00
  • 完整的医院就诊挂号系统基于Spring MVC + Spring + MyBatis实现

    完整的医院就诊挂号系统基于Spring MVC + Spring + MyBatis实现 医院就诊挂号系统是一个常见的医疗信息化应用,它可以帮助患者方便地预约挂号、查询医生信息、查看就诊记录等。本文将详细讲解如何使用 Spring MVC + Spring + MyBatis 框架实现一个完整的医院就诊挂号系统,包括如何设计数据库、如何实现业务逻辑、如何实现…

    Java 2023年5月18日
    00
  • java 解决Eclipse挂掉问题的方法

    Java 解决 Eclipse 挂掉问题的方法 在开发 Java 项目过程中,有时会遇到 Eclipse 挂掉的情况。这可能是由于运行环境问题、占用内存过多造成的。下面介绍几种常用方法来解决 Eclipse 挂掉问题。 方法一:修改 Eclipse.ini 文件 在 Eclipse 的安装目录下找到 Eclipse.ini 文件(Windows 系统默认安装…

    Java 2023年6月15日
    00
  • 通过Java组合问题看透回溯法

    通过Java组合问题看透回溯法的完整攻略可以分为以下几个步骤: 1. 确定问题模型 首先,我们需要确定问题模型。以Java组合问题为例,问题模型是在给定的n个数字中,任选k个数字,求它们的组合。 2. 定义回溯函数 接下来,我们需要定义回溯函数。回溯函数是实现回溯功能的主要函数。以Java组合问题为例,回溯函数需要有以下参数:- nums:可选数字的集合- …

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