博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小代学Spring Boot之自定义Starter
阅读量:4557 次
发布时间:2019-06-08

本文共 2919 字,大约阅读时间需要 9 分钟。

想要获取更多文章可以访问我的博客 - 。

使用Spring Boot框架一段时间之后的小代同学,发现在Spring Boot项目中经常会引入各种各样的Starter,例如Web项目的spring-boot-starter-web以及集成MyBatis时的mybatis-spring-boot-starter。那么这个Starter到底是些什么呢?

什么是Starter

经过一番研究,小代同学了解到Starter主要是Spring Boot用来简化项目依赖的一种形式,比如spring-boot-starter-web中包含了一个Web项目通常所需要的依赖,这样我们就只需要依赖一个Starter即可,无需一个一个的添加所有的Web项目所需的Jar包,而且我们还可以通过Starter来做一些自动配置。

作为一个喜欢研究的程序员,小代同学就想能不能将之前连接MyBatis的过程封装成一个Starter,这样以后其他项目集成MyBatis就会简单许多了。如果你想了解Spring Boot集成MyBatis相关的内容,可以查看之前的文章。在开始实现之前,小代同学查询了一下Starter的命名规范。

Starter的命名规范

1.Spring Boot自己提供的一些Starter的命名一般以spring-boot-starter-xxx命名,例如spring-boot-starter-web

2.我们自己定义的Starter通常情况下以xxx-spring-boot-starter的形式命名。

自定义Starter

知道如何命名一个自定义Starter之后,小代同学根据命名的建议新建了一个mybatis-config-spring-boot-starter的项目。并且将之前集成MyBatis时候添加的依赖全部添加进来了。

添加完依赖之后,我们还需要一个配置类用来在项目启动时自动配置连接池以及扫描Mapper文件。所以小代同学新建了一个MyBatisAutoConfiguration类来做这些东西。

@Configuration@EnableConfigurationProperties({MyBatisProperties.class, DruidDataSourceProperties.class})public class MyBatisAutoConfiguration {    @Autowired    private MyBatisProperties myBatisProperties;    @Autowired    private DruidDataSourceProperties druidDataSourceProperties;    ...此处省略若干代码。    @Bean(name = "sqlSessionFactory")    @ConditionalOnMissingBean(name = "sqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("druidDataSource") DruidDataSource druidDataSource) throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(druidDataSource);        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()                .getResources(myBatisProperties.getMapperXmlLocation()));        return sessionFactory.getObject();    }}

由于与之前集成MyBatis的配置大体一致,所以上面粘贴的代码有很多被省略的部分,您可以在中找到。其实也就是将之前集成MyBatis的配置Copy过来然后稍作修改,主要有以下几点修改:

  1. 定义了MyBatisProperties类,这个类主要是从配置文件中读取Mapper.xml的地址。配置会话工厂sqlSessionFactory的时候设置的MapperLocation的路径就是从这里获取的。
  2. 去除了之前配置类上的@MapperScan注解,去掉的原因是我没有找到在注解中如何获取配置文件中的值,所以将它挪到了使用这个Starter的项目的启动类上。

编写完上面的自动配置类后,我们需要做的是让Spring Boot知道在启动的时候需要执行这个配置类中的代码,实现的方式是在resources文件夹下新建META-INF/spring.factories文件,里面的内容如下所示。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\cn.itweknow.mybatisconfigspringbootstarter.config.MyBatisAutoConfiguration

好了,到这一步我们集成MyBatis的Starter就已经完工了,接下来我们就来准备一个项目来测试一下吧。

Starter的使用

小代同学为了测试自己定义的Starter,特地新建了一个项目starter-test。然后小代同学充满信心地将上面定义的Starter添加到了测试项目中。

cn.itweknow
mybatis-config-spring-boot-starter
0.0.1-SNAPSHOT

添加了依赖之后,小代同学编写了一些简单的测试代码,具体的测试代码在这里就不贴出来了,大家可以在中找到。但是第一次测试不幸的失败了,失败的原因是Mapper类都没有被初始化,原来是忘了在启动类上添加@MapperScan注解,加上之后就可以完成测试了。

结束语

本文主要以Spring Boot集成MyBatis为例带大家一起了解了一下如何实现一个Spring Boot项目的Starter。但是在实现过程中有一点点遗憾,就是没有找到在@MapperScan里使用配置文件中配置的包路径的方法,如果您知道的话欢迎提交Pull Request。本文的您可以在Github上找到,如果您喜欢这篇文章的话可以给个Star哦。

PS:学习不止,码不停蹄!如果您喜欢我的文章,就关注我吧!

扫码关注“代码无止境”

转载于:https://www.cnblogs.com/endless-code/p/11229526.html

你可能感兴趣的文章
爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)
查看>>
Random随机类
查看>>
Git学习笔记 1,GitHub常用命令1
查看>>
详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
查看>>
php引用计数与变量引用
查看>>
UITableView移动
查看>>
linux 查看自己所在的公网ip
查看>>
CF798C Mike and gcd problem
查看>>
CF975D Ghosts
查看>>
springboot-11-servlet, listener, fitlter的添加
查看>>
《你的灯亮了吗》阅读笔记
查看>>
js,需要更多源字符
查看>>
使用Verdi理解RTL design
查看>>
Coolpy使用教程
查看>>
[小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建
查看>>
Zookeeper Watcher 解析
查看>>
如何在K3查找BOS单据在哪个子系统中
查看>>
光流optical flow基本原理与实现
查看>>
Ubuntu系统里如何正确卸载oracle-j2sdk1.6(图文详解)
查看>>
Entity Framework加载相关实体——Eager Loading
查看>>