想要獲取更多文章能夠訪問個人博客 - 代碼無止境。html
使用Spring Boot框架一段時間以後的小代同窗,發如今Spring Boot項目中常常會引入各類各樣的Starter,例如Web項目的spring-boot-starter-web
以及集成MyBatis時的mybatis-spring-boot-starter
。那麼這個Starter究竟是些什麼呢?java
通過一番研究,小代同窗瞭解到Starter
主要是Spring Boot用來簡化項目依賴的一種形式,好比spring-boot-starter-web
中包含了一個Web項目一般所須要的依賴,這樣咱們就只須要依賴一個Starter
便可,無需一個一個的添加全部的Web項目所需的Jar包,並且咱們還能夠經過Starter
來作一些自動配置。git
做爲一個喜歡研究的程序員,小代同窗就想能不能將以前鏈接MyBatis的過程封裝成一個Starter
,這樣之後其餘項目集成MyBatis就會簡單許多了。若是你想了解Spring Boot集成MyBatis相關的內容,能夠查看以前的文章《小代學Spring Boot之集成MyBatis》。在開始實現以前,小代同窗查詢了一下Starter
的命名規範。程序員
1.Spring Boot本身提供的一些Starter的命名通常以spring-boot-starter-xxx
命名,例如spring-boot-starter-web
。
2.咱們本身定義的Starter
一般狀況下以xxx-spring-boot-starter
的形式命名。github
知道如何命名一個自定義Starter
以後,小代同窗根據命名的建議新建了一個mybatis-config-spring-boot-starter
的項目。而且將以前集成MyBatis時候添加的依賴所有添加進來了。
添加完依賴以後,咱們還須要一個配置類用來在項目啓動時自動配置鏈接池以及掃描Mapper文件。因此小代同窗新建了一個MyBatisAutoConfiguration
類來作這些東西。web
@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過來而後稍做修改,主要有如下幾點修改:spring
MyBatisProperties
類,這個類主要是從配置文件中讀取Mapper.xml的地址。配置會話工廠sqlSessionFactory
的時候設置的MapperLocation的路徑就是從這裏獲取的。@MapperScan
註解,去掉的緣由是我沒有找到在註解中如何獲取配置文件中的值,因此將它挪到了使用這個Starter
的項目的啓動類上。編寫完上面的自動配置類後,咱們須要作的是讓Spring Boot知道在啓動的時候須要執行這個配置類中的代碼,實現的方式是在resources
文件夾下新建META-INF/spring.factories
文件,裏面的內容以下所示。sql
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ cn.itweknow.mybatisconfigspringbootstarter.config.MyBatisAutoConfiguration
好了,到這一步咱們集成MyBatis的Starter
就已經完工了,接下來咱們就來準備一個項目來測試一下吧。springboot
小代同窗爲了測試本身定義的Starter
,特意新建了一個項目starter-test
。而後小代同窗充滿信心地將上面定義的Starter
添加到了測試項目中。session
<dependency> <groupId>cn.itweknow</groupId> <artifactId>mybatis-config-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
添加了依賴以後,小代同窗編寫了一些簡單的測試代碼,具體的測試代碼在這裏就不貼出來了,你們能夠在源碼中找到。可是第一次測試不幸的失敗了,失敗的緣由是Mapper類都沒有被初始化,原來是忘了在啓動類上添加@MapperScan
註解,加上以後就能夠完成測試了。
本文主要以Spring Boot集成MyBatis爲例帶你們一塊兒瞭解了一下如何實現一個Spring Boot項目的Starter
。可是在實現過程當中有一點點遺憾,就是沒有找到在@MapperScan
裏使用配置文件中配置的包路徑的方法,若是您知道的話歡迎提交Pull Request
。本文的完整實現您能夠在Github上找到,若是您喜歡這篇文章的話能夠給個Star哦。
PS:學習不止,碼不停蹄!若是您喜歡個人文章,就關注我吧!