spring initializr脚手架搭建详解

news2025/1/23 17:42:52

前段时间,我在「基于start.spring.io,我实现了Java脚手架定制」一文中讲述了敝司的微服务脚手架落地过程中的前世今生,并提到了基于 spring initializr 的搭建了 2.0 版本的脚手架。今天我打算和你分享一下这其中的实现过程与细节,项目已经开源在 Github 上。

start-parent:https://github.com/studeyang/start-parent

欢迎 star

1、项目结构介绍

项目分为 initializr、start-client、start-site 三个部分,重要部分说明如下。

start-parent
  |- initializr                    代码生成
    |- initializr-actuator
    |- initializr-bom
    |- initializr-docs
    |- initializr-generator         生成基础工程代码
    |- initializr-generator-spring  生成 spring 工程代码
    |- initializr-generator-test    单元测试的封装
    |- initializr-generator-zebra   生成 zebra 分层架构
    |- initializr-metadata          工程元数据(pom 相关定义)
    |- initializr-parent
    |- initializr-service-sample
    |- initializr-version-resolver  版本解析
    |- initializr-web
  |- start-client                   脚手架前端
  |- start-site                     脚手架后端

工程间的依赖关系图我作了简化,图示如下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ax7h4zN2-1669546001504)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/image-20221020152301967.png)]

了解了项目的整体情况,下面请跟随我的思路,一起将工程搭建起来。

2、集成Gitlab

如果你想使用项目中的「创建工程」功能,则需要进行此步骤的配置。这里我以gitlab.com为例,介绍如何完成与 Gitlab 的集成。

首先需要让 Gitlab 信任我们的应用,以完成后面的登录授权跳转。在 Gitlab 平台配置脚手架应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ou0ErXbt-1669546001505)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/image-20221122142337155.png)]

这里我配置了本地开发环境的 Redirect URI,如果后续需要部署到服务器,则应该配置脚手架服务器的后端地址。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GjVIn5Ps-1669546001505)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/image-20221122142420051.png)]

配置完成后,Gitlab 就将我们的应用记录了下来,并分配了 Application ID 和 Secret,这两个字段值我们需要配置到 start-site application.yml 文件中:

security:
  base-url: https://gitlab.com
  authorization-uri: ${security.base-url}/oauth/authorize
  token-uri: ${security.base-url}/oauth/token
  user-info-uri: ${security.base-url}/api/v4/user
  redirect-uri: http://127.0.0.1:8081/oauth/redirect
  client-id: gitlab client id
  client-secret: gitlab client secret
  admin:
    name: your gitlab admin username
    password: your gitlab admin password

这里我简单介绍一下相关字段,authorization-uri, token-uri, user-info-uri 这三个字段是固定的,不需要配置。

  • base-url:如果你使用gitlab管理项目,base-url可以设置成你搭建的gitlab地址;
  • redirect-uri:gitlab 认证后跳转的地址,这里使用了后端来接收跳转,因为跳转会携带 code 参数,避免暴露在浏览器,提高安全性;
  • client-id:gitlab 分配的 Application ID;
  • client-secret:gitlab 分配的 Secret;
  • admin.name:gitlab 的账号,用于创建工程,并将初始的工程代码提交,建议配置管理员账号;
  • admin.password:gitlab 的账号密码;

3、添加组件

接下来添加组件依赖。这里我以casslog-spring-boot-starterJar 包为例,如果该组件仅支持部分版本的 SpringBoot,那可以配置 compatibility-range,例如:

compatibility-range: "[1.4.2.RELEASE,1.5.7.RELEASE]"

完整的配置如下。

initializr:
  dependencies:
    - name: 开源基础设施
      bom: kmw
      repository: my-rep
      content:
        - name: Casslog
          id: casslog
          groupId: io.github.studeyang
          artifactId: casslog-spring-boot-starter
          description: 日志工具类
          starter: true
          compatibility-range: "[1.4.2.RELEASE,1.5.7.RELEASE]"
          links:
            - rel: guide
              href: {用户手册}
              description: Example 快速开始
            - rel: reference
              href: {参考文档}

配置dependencies。

  • 「name」组件依赖类别的名称,例如:开源基础设施
  • 「bom」该类别下的依赖包管理库
  • 「repository」该类别下的依赖包所属仓库
  • 「content」具体的依赖包

配置content。

  • 「name」依赖包名称
  • 「id」依赖包唯一标识(代码中使用)
  • 「groupId」依赖包 groupId
  • 「artifactId」依赖包 artifactId
  • 「description」依赖包 description
  • 「starter」是否是 spring-boot-starter
  • 「compatibility-range」依赖的 springboot 版本
  • 「links」组件的使用文档

配置好的效果图如下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9eUiuQM-1669546001506)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/202211271349589.png)]

4、部署应用

下面就可以将脚手架部署到服务器上了。

这里提醒一下,记得修改 Gitlab 的 redirect-uri 为脚手架服务器的地址。

4.1 步骤一:工程打包

# 打包前端工程
cd {projectRoot}/start-client
sh ../mvnw install

# 打包 initializr 项目
cd {projectRoot}/initializr
sh ../mvnw clean install -Dmaven.test.skip=true

# 打包 start-site
cd {projectRoot}/start-site
sh ../mvnw clean install -Dmaven.test.skip=true

4.2 步骤二:打 Docker 镜像

cd {projectRoot}/start-site
docker build -t start-site:0.0.1 .

运行镜像即可。效果图如下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4296QOe-1669546001506)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/202211271058880.png)]

5、使用脚手架的正确姿势

5.1 通过HELP.md管理使用文档

在「3、添加组件」过程中所配置的文档链接将会在 HELP.md 文件中展示,示意图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzTHijC2-1669546001506)(https://technotes.oss-cn-shenzhen.aliyuncs.com/2022/202211271355264.png)]

5.2 保存/分享工程

你配置好的工程可以通过「分享…」功能保存下来。

分享

5.3 在IDEA中使用脚手架

可在 IDEA 中快速创建工程,只需要配置好脚手架服务器地址即可。需要注意的是社区版的 IDEA 是没有这个功能的。

IDEA

小结

本文向你介绍了 Spring Initializr 脚手架的搭建过程,如果你在此过程中遇到了问题,可以提 ISSUE 或者在公众号「杨同学technotes」后台给我留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 如何实现一个全局搜索框

前言:自从学习 vue 以来,就对 vue 官网全局的 command K 调出全局关键词搜索这个功能心心念念。恰好最近项目也是需要实现一个全局搜索的功能,也正好可以正大光明的带薪学习这个功能的思路。网上的教程水平参差不齐,而恰好之前的…

qmake 与 配置文件

用qmake生成makefile的时候,背后会先执行一堆用qmake language编写的库文件(配置文件),用于初始化一些环境相关的工作,为后续解析pro文件做准备。 下面是qmake解析一个新建的qt工程的pro文件背后所解析的配置文件的文件…

2022-11-27阿里云物联网平台 MICROPYTHON记录

之前写过EMQX在阿里云的云服务器上搭建流程,近期云服务器到期了,而且由于没有业务支撑短期也不打算再开云服务器了,但是物联网还是要用的,于是开了这个阿里云物联网的记录。 这个是比较详细的已有的博客记录 这个博客居然还有配套…

从ABNF读懂HTTP协议格式

定义 HTTP(Hyper Text Transfer Protocol)超文本传输协议 HTML( Hyper Text Markup Language)超文本标记语言 URI(Uniform Resource Identifier)用于标识某一互联网资源名称的字符串(uri 包括了…

自动控制原理1~3章课后练习题

1.适合于应用传递函数描述的系统是线性定常系统 2.某0型单位反馈系统的开环增益为K&#xff0c;则在 r(t)1/2*t^2 输入下&#xff0c;系统的稳态误差为 无穷 3.动态系统 0 初始条件是指 t<0 时系统的 输入、输出以及它们的各阶导数为 0 4.若二阶系统处于无阻尼状态&#…

毕业设计-opencv图像视频质量评价分析

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

二级域名配置以及nginx解析二级域名到html页面

此文章适合发布前端项目使用&#xff0c;如果想要配置二级域名到后端服务&#xff0c;可以查看这篇文章&#xff1a;nginx配置二级域名 - 简书 在阿里云上配置二级域名&#xff0c;就是添加一条记录就可以了&#xff0c;超级简单&#xff0c;不懂的可以看后面的解释说明&#…

05.深入理解JMM和Happens-Before

JMM都问啥&#xff1f; 最近沉迷P5R&#xff0c;所以写作的进度很不理想&#xff0c;但不得不说高卷杏YYDS。话不多说&#xff0c;开始今天的主题&#xff0c;JMM和Happens-Before。 关于它们的问题并不多&#xff0c;基本上只有两个&#xff1a; JMM是什么&#xff1f;详细…

[附源码]计算机毕业设计JAVA社团管理系统

[附源码]计算机毕业设计JAVA社团管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

c语言实现三子棋

目录 一、三子棋玩法 二、需要实现的游戏功能 三、拆分代码 3.1游戏菜单 3.2初始化棋盘 3.2.1函数调用 3.2.2函数体实现 3.3打印棋盘 3.3.1函数调用 3.3.2函数体实现 3.4玩家下棋 3.4.1函数调用 3.4.2函数体实现 3.4.3效果展示 3.5电脑下棋 3.5.1函数调用 3.5…

强大博客搭建全过程(1)-hexo博客搭建保姆级教程

1、 前言 本人本来使用国内的开源项目solo搭建了博客&#xff0c;但感觉1核CPU2G内存的服务器&#xff0c;还是稍微有点重&#xff0c;包括服务器内还搭建了数据库。如果自己开发然后搭建&#xff0c;耗费时间又比较多&#xff0c;于是乎开始寻找轻量型的博客系统。 此时hexo…

苹果系统(macos)code with me 控制端下载不下来,下载缓慢,解决办法

jetbrains的插件,依赖包,或者是工具之类的下载通常都比较慢,尤其是大文件等很久后可能还断开了.又要重头下.比如 code with me,以下简称cwm curl: (56) Recv failure: Connection reset by peer 如果你曾用sh安装时提示这个,多数就是网络连接不行了. 简单说就是用下载工具下…

redis集群搭建教程及遇到的问题处理

这里&#xff0c;在一个Linux虚拟机上搭建6个节点的redis伪集群&#xff0c;思路很简单&#xff0c;一台虚拟机上开启6个redis实例&#xff0c;每个redis实例有自己的端口。这样的话&#xff0c;相当于模拟出了6台机器了&#xff0c;然后在以这6个实例组建redis集群就可以了。 …

jsp旅行社管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅行社管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用…

JAVA之Spring MVC 请求与响应 REST风格 SSM整合(注解版)

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 使用简单&#xff0c;开发便捷&#xff08;相比于Servlet&#xff09; 灵活性强 入门案例 导入依赖SpringMVC坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-web…

[附源码]计算机毕业设计JAVA实践教学管理系统

[附源码]计算机毕业设计JAVA实践教学管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

01 使用docker搭建wordpress博客网站

文章目录1. 前言1.1 容器技术思维导图1.2 wordpress 网络架构图2. 拉取镜像3. 搭建博客网站3.1 启动MariaDB3.2 运行应用服务器 WordPress3.3 使用nginx 做反向代理3.4 检查容器状态4. 登录博客配置5 查看数据库1. 前言 基于之前学习kubernetes 比较乱&#xff0c;打算重新学习…

机器学习笔记 十九:由浅入深的随机森林模型之分类

随机森林学习内容1. 集成学习2.sklearn中的集成算法2.1 sklearn中的集成算法模块ensemble2.2 RandomForestClassifier2.2.1 参数2.2.2 n_estimators2.2.3 random_state2.2.4 bootstrap & oob_score2.3 随机森林的重要接口2.4 Bonus&#xff08;装袋法的必要条件&#xff09…

【指针详解】(上)看一遍就会❗❗❗家人们冲❗

前言 ❤️ 铁汁们大家好&#xff0c;欢迎大家来到出小月的博客里&#xff0c; &#x1f917;&#x1f917;&#x1f917;之前呢&#xff0c;我分享了C语言的小游戏“扫雷”。。。。今天呢&#xff0c;给大家分享指针篇&#xff0c;&#xff0c;希望大家看完我这篇文章都能够“涨…

Java Tomcat内存马——Servlet内存马

目录 前言&#xff1a; &#xff08;一&#xff09;Servlet的创建 1、实现javax.servlet.Servlet接口的方式 2、继承GenericServlet类创建Servlet 3、继承了HttpServlet进行创建 &#xff08;二&#xff09;分析注入方式 代码分析 (三&#xff09;payload 1、StandardC…