相信很多人都使用过 start.spring.io 来初始化自己的 Spring Boot 工程,这个工具为开发者提供了丰富的可选组件,并且可以选择多种打包方式,大大方便了开发人员的使用。最近,阿里的 Nacos、Sentinel 也进入 start.spring.io 的选项中,进一步的方便开发者使用阿里云的产品。
但是,生成的工程骨架中,只有组件坐标信息,缺少对应的使用方法和 Demo 代码;于是,开发者还是需要去寻找相关使用教程,或者样例代码;如果找的不对,或者是版本不匹匹配,还需要花费不少时间去排查和解决问题;这些问题都在无形中增加用户的工作量。
我们将对软件工程的抽象层次自上而下进行切分,会得到如下的几个层级:行业、解决方案、应用、功能、组件;明显的, start.spring.io 目前只能提供组件级别的支持。再将组件这层展开,会发现这样一个生命周期:组件引入、组件配置、功能开发、线上运维。start.spring.io 也只实现了“组件引入”这一功能。
我们的目标是“让阿里云成为广大 Java 开发者最好用的云”。要实现这个目标,是否可以再向前走几步,在解决“组件引入”问题的基础上,将组件的典型使用方法、样例代码、使用说明也加入到工程中呢?
基于这种思考,我们上线了自己的 bootstrap 站点 start.aliyun.com :
https://start.aliyun.com/
当然,本着不重复造轮子的原则,我们不再构建一套工程生成底层框架,而是使用 Spring Initializr 来实现这部分功能。在此之上专注于增加新特性,实现服务广大开发者的目标。
Spring Initializr:https://github.com/spring-io/initializr
在 start.aliyun.com 中,我们为广大开发者带来了如下便利特性:
为每个组件提供了单独的 DemoCode 和对应的配置样例(本次已发布);
工程内置说明,减少用户查找文档的困难(部分实现);
开发者只需要做减法,而非加法的使用方式(部分实现);
提供多组件集成的解决方案(开发中);
定期跟进 start.spring.io 的更新,方便大家使用到 spring 的最新功能。
start.aliyun.com:https://start.aliyun.com/
未来,我们还需要再助力开发者这条路上继续发力,不仅仅是做好组件集成的工作,还要需要继续向上支持,提供更多功能、服务、应用层级的快速构建能力。
本文,围绕 spring initializr 框架,以 start.spring.io 为例,全面的给大家介绍如何使用和扩展这个框架,以及背后的运行原理。
使用篇由于 spring-initializr 提供了灵活的扩展能力,以及丰富的默认实现;其使用方式也是非常的灵活多变;为了便于说明,我们直接通过 start.spring.io ,看看 Spring 自己是怎么使用这套框架的。
1. 基本用法基本用法的原则,是尽量少写代码,甚至是不写代码。只通过配置就可以实现 initializr 工程的创建。
依赖引入要使用 spring-initializr ,首先要引入这套框架。很简单,直接依赖 bom 即可:
<dependencyManagement> <dependencies> <dependency> <groupId>io.spring.initializr</groupId> <artifactId>initializr-bom</artifactId> <version>0.9.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>有了这个 bom 依赖,我们就不用再关心内部组件的版本等信息了。
一般来说,我们还需要引入具体组件:
<dependency> <groupId>io.spring.initializr</groupId> <artifactId>initializr-generator-spring</artifactId> </dependency> <dependency> <groupId>io.spring.initializr</groupId> <artifactId>initializr-version-resolver</artifactId> </dependency> <dependency> <groupId>io.spring.initializr</groupId> <artifactId>initializr-web</artifactId> </dependency>具体每个子模块的用途,这里列出来,供读者参考:
initializr-actuator: 监控诊断的附加信息,这个暂时忽略;
initializr-bom: 便于外部使用的bom依赖;
initializr-docs: 使用文档;
initializr-generator: 核心工程生成库;
initializr-generator-spring: 用于生成典型的spring boot工程;
initializr-generator-test: 测试框架;
initializr-metadata: 项目各个方面的元数据基础结构;
initializr-service-sample: 基本使用案例;
initializr-version-resolver:版本号解析能力;
initializr-web: 提供给三方客户端使用的web入口。
基本配置完成了框架引入,就需要做一些基础配置了
支持哪些语言:Java、groovy、Kotlin
支持哪些版本:1.8、11、13
支持哪些打包方式:jar、war