自定义spring boot starter三部曲之一:准备工作

从本章开始,一起实战一个自定义的spring boot starter,整个系列共三篇文章,内容如下:

  1. 准备:了解基本概念、规划实战内容;
  2. 实战:开发自定义starter,并在demo工程中使用它;
  3. 深入:从spring和spring boot源码层面分析starter的原理;

三部曲文章链接

  1. 《自定义spring boot starter三部曲之一:准备工作》
  2. 《自定义spring boot starter三部曲之二:实战开发》
  3. 《自定义spring boot starter三部曲之三:源码分析spring.factories加载过程》

本章内容概览

  1. 查看官方资料;
  2. 设定实战目标;
  3. 学习spring cloud的starter,作为实战参考;
  4. 实战内容的具体设计;

版本信息

本次实战的版本信息:

  1. java:1.8.0_144
  2. spring boot:1.5.16.RELEASE
  3. spring cloud:Edgware.RELEASE

官方资料

为了有个初始印象,我们从spring官方文档看起吧:

  1. 官网:https://spring.io/docs/reference,点击下图红框位置:
    在这里插入图片描述

  2. 在弹出的列表中选择1.5.16版本的reference,如下图红框:
    在这里插入图片描述

  3. 在打开的文档目录中很容易找到starter的章节,地址是:https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/htmlsingle/#using-boot-starter,内容如下图:
    在这里插入图片描述

我的理解:
第一. 在应用中可以用starter将依赖库问题变得简单,如果你想依赖Spring和JPA,只需在应用中依赖spring-boot-starter-data-jpa即可;
第二. 常用库的官方starter,其artifactId的格式类似"spring-boot-starter-*", 对于非官方的starter,建议将业务名称放在"spring-boot-starter"前面,例如"acme-spring-boot-starter";
第三. 已列举常用的官方starter,可用来参考;

设定实战目标

本次实战的目标如下:

  1. A应用提供加法计算的服务;
  2. B应用提供减法计算的服务;
  3. C应用要使用加法计算和减法计算的服务,并且减法服务可以通过配置来实现是否支持负数;

学习spring cloud的starter

目标已定下,但是先不急着编码,我们去看下spring cloud的设计,用来作为借鉴参考;

回顾一下我们使用Spring cloud的时候,如果要把一个应用作为Eureka client注册到Eureka server,只需在应用的pom.xml中添加如下依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

注册到Eureka server的工作,是由CloudEurekaClient类完成的,该类属于模块spring-cloud-netflix-eureka-client,因此我们要弄清楚以下两点:

  1. 为什么不需要应用的pom.xml中依赖spring-cloud-netflix-eureka-client?
  2. 为什么应用能自动注册到Eureka sever?

如何建立对spring-cloud-netflix-eureka-client模块的依赖

打开spring-cloud-starter-netflix-eureka-client模块的pom.xml文件就一目了然了,如下图,原来在这个pom.xml文件中已经依赖了spring-cloud-netflix-eureka-client模块,因此,我们的应用只需依赖spring-cloud-starter-netflix-eureka-client模块,就能间接依赖到spring-cloud-netflix-eureka-client模块:
在这里插入图片描述

再看看上图中其他的依赖,可以发现的确如官方文档所说,starter处理了复杂的依赖关系,我们只需要依赖starter即可,官方文档中还有一段话需要注意,如下图:
在这里插入图片描述

上图红框中说明starter是个空的jar,其作用就是用来提供必要的模块依赖的,来看看spring-cloud-starter-netflix-eureka-client模块是否遵守此规则,如下图,只有配置文件,没有任何class:
在这里插入图片描述

为什么应用能自动注册到Eureka sever

作为Eureka client的应用,在启动后就自动注册到Eureka server了,作为应用开发者的我们除了在pom.xml中依赖spring-cloud-starter-netflix-eureka-client模块,没有做其他设置,这是如何实现的呢?

  1. 注册到Eureka server的工作,是CloudEurekaClient类在其父类的构造方法中完成的,搜索源码发现此类的在EurekaClientAutoConfiguration中被注册到spring容器,如下图红框所示:
    在这里插入图片描述

所以,现在问题就变成了如何让EurekaClientAutoConfiguration类被实例化?

  1. 在spring-cloud-netflix-eureka-client模块的spring.factories文件中,找到了EurekaClientAutoConfiguration:
    在这里插入图片描述

这是个spring boot的扩展配置,在此文件中配置的bean都会被实例化,然后注册到spring容器,具体的细节,我们会在第三章结合spring boot源码详细分析,本章只要知道用法即可;

此处小结Eureka client自动注册到Eureka server的过程:
第一、spring-cloud-netflix-eureka-client模块的spring.factories文件中配置了EurekaClientAutoConfiguration,因此EurekaClientAutoConfiguration会被实例化并注册到Spring容器中;
第二、EurekaClientAutoConfiguration中配置了CloudEurekaClient,因此CloudEurekaClient会实例化,在构造方法中执行了注册;

实战的设计

参考了spring cloud的starter设计后,接下来的实战被设计成两个maven工程:customizestarter和customizestartertestdemo;

  1. 工程customizestarter里面包含了四个模块,每个模块功能如下所示:
模块名称作用备注
customizeapi包含 了接口和异常的定义实现和调用服务时用到的接口和异常都在此工程中
addservice提供加法服务普通的maven工程,里面加法接口的实现类
minusservice提供减法服务普通的maven工程,里面有两个减法接口的实现类,一个支持负数,另一个不支持
customizeservicestarter自定义starter模块pom.xml中依赖了customizeapi、addservice、minusservice,自身有个Configuration类,通过@Bean注解向spring容器注册AddService和MinusService的实例
  1. 工程customizestartertestdemo在pom.xml中依赖了上述的customizeservicestarter模块,提供的web服务会用到addservice和minusservice的服务,并且在应用启动时设置环境变量来选择使用的减法服务是否支持负数;

至此,准备工作已经完成了,对基本原理和开发设计都已经清楚,接下来的章节我们来一起开发上述五个工程;

欢迎关注我的公众号:程序员欣宸

在这里插入图片描述

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Spring Boot StarterSpring Boot 应用程序的预配置模块,可以帮助我们快速集成常用框架。MyBatis 是一个持久层框架,用于映射 Java 对象到数据库表。 如果要在 Spring Boot 应用程序中使用 MyBatis,可以创建自定义Spring Boot Starter 来简化配置。 步骤如下: 1. 创建一个 maven 项目,并在 pom 文件中添加依赖 spring-boot-starter、mybatis-spring-boot-starter。 2. 创建一个配置类,来配置 MyBatis。 3. 创建一个自动配置类,用于自动配置 MyBatis。 4. 创建一个 starter 类,用于向 Spring Boot 提供自动配置。 5. 在 pom 文件中添加相关信息,用于发布到 maven 仓库。 6. 发布到 maven 仓库,并在其他项目中使用。 如果你想要详细了解,可以参考官网上关于 Spring Boot Starter 的文档。 ### 回答2: 要自定义 Spring Boot Starter 操作 MyBatis 数据库,可以按照以下步骤进行操作: 1. 创建一个 Maven 项目,并指定父项目为 Spring Boot Starter Parent。 2. 在项目的 pom.xml 文件中添加必要的依赖,包括 Spring Boot Starter、MyBatis 和相应的数据库驱动程序。 3. 创建一个自定义的配置类,用于配置 MyBatis 的数据源、事务管理器等。 4. 在配置类中使用 @Configuration 注解标注该类为配置类,并使用 @EnableConfigurationProperties 注解引入配置属性。 5. 创建一个自定义的 Starter 类,用于自动配置 MyBatis 相关的组件。 6. 在 Starter 类中使用 @Configuration 注解标注该类为配置类,并使用 @EnableAutoConfiguration 注解启用自动配置。 7. 在 Starter 类中使用 @ConditionalOnClass 注解,指定条件,在类路径下存在 MyBatis 相关的类时才进行自动配置。 8. 在 Starter 类中使用 @Import 注解,导入配置类,将自定义的配置应用到 Spring Boot 项目中。 9. 编写自定义的配置文件,用于配置 MyBatis 的相关属性,例如数据库连接信息、Mapper 扫描路径等。 10. 在项目的 pom.xml 文件中添加 spring.factories 文件,将自定义的 Starter 类注册到 Spring Boot 应用中。 11. 在 Spring Boot 项目中添加对自定义 Starter 的依赖,可通过 Maven 依赖坐标来引入。 12. 配置项目的 application.properties 或 application.yml 文件,指定数据库相关的信息以及其他自定义属性。 经过以上步骤的操作,就可以自定义 Spring Boot Starter 来操作 MyBatis 数据库了。可以通过引入自定义的 Starter 来简化项目的配置,并在应用中直接使用 MyBatis 进行数据库操作,提高开发效率和代码的可维护性。 ### 回答3: 自定义Spring Boot Starter操作Mybatis数据库涉及以下步骤: 1. 创建一个新的Maven项目,并在pom.xml文件中添加Spring Boot和Mybatis依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> ``` 2. 创建一个自定义的starter模块,在其中定义配置类和Mybatis相关配置: ```java @Configuration @AutoConfigureAfter(DataSourceAutoConfiguration.class) @EnableConfigurationProperties(MybatisProperties.class) public class MybatisAutoConfiguration { @Autowired private MybatisProperties properties; @Autowired(required = false) private List<Interceptor> interceptors; @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(dataSource); factory.setConfiguration(properties.getConfiguration()); if (interceptors != null) { factory.setPlugins(interceptors.toArray(new Interceptor[0])); } return factory.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 3. 创建自定义的配置类MybatisProperties,用于定义数据库的相关配置: ```java @ConfigurationProperties(prefix = "spring.mybatis") public class MybatisProperties { private Configuration configuration; // 其他配置... // Getter和Setter方法 } ``` 4. 在resources目录下创建配置文件application.yml,配置数据库相关信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: username password: password spring: mybatis: configuration: map-underscore-to-camel-case: true cache-enabled: true ``` 5. 在使用的项目中添加自定义的starter依赖,并在application类上添加@EnableMybatis注解: ```java @SpringBootApplication @EnableMybatis public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 通过以上步骤,我们就可以自定义Spring Boot Starter来操作Mybatis数据库了。这样做的好处是,可以将Mybatis的配置和操作封装在starter中,使得项目更加简洁,并且能够方便地重用该starter

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员欣宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值