使用Gradle7.6.1 + SpringBoot3.0.2 + java17创建微服务项目(学习)

这是一个大胆的决定

这里是导航

  • 技术栈
  • 开发工具
  • 一、创建gradle父子项目(`deity`)
    • 1.0 简单流程示意
    • 1.1、IDEA中主要图示
      • 1.1.1 项目结构图
      • 1.1.2 IDEA中 Gradle配置
    • 1.2、`deity`父项目build.gradle文件
    • 1.3、`deity`父项目settings.gradle文件
    • 1.4、子项目build.gradle
    • 1.5、子项目中的 application.yml 配置
      • 1.5.1、`mall-Ares` application.yml
      • 1.5.2、`mall-angel`application.yml
    • 1.6、测试Controller
      • 1.6.1、`mall-Ares`测试代码
      • 1.6.2、`mall-angel`测试代码
    • 1.7、测试是否启动
  • 二、创建gitee仓库,推送到远端
    • 2.1、登录gitee新建仓库(`deity`)
      • 2.1.1、得到如下命令(新建仓库,使用`创建git仓库` 即可)
    • 2.2、git执行命令
      • 2.2.1、IDEA中可以验证代码是否上传仓库成功
      • 2.2.2、在gitee仓库中查看代码是否上传成功
    • 2.3、git 常用知识浅谈
  • 三、Nacos 服务注册 SpringCloud Alibaba
    • 3.1、启动win下的单机nacos
    • 3.2、给项目创建一个命名空间
    • 3.3、引入新的需要的依赖
      • 3.3.1 子项目依赖更新图
    • 3.4、 启动类添加 @EnableDiscoveryClient 注解
    • 3.5 、创建bootstrap.yml进行配置
    • 3.6、在nacos管理平台中查看注册进入的服务

技术栈

技术版本
spring-boot3.0.2
spring-cloud2022.0.2
spring-cloud-alibaba2022.0.0.0-RC2
mybatis-plus-boot-starter3.5.3.1
mysql-connector-java8.0.32

开发工具

技术版本
java17
gradle7.6.1
IDEA2022.2.4
Nvcat15
MySQL8.0.32

一、创建gradle父子项目(deity

1.0 简单流程示意

  • 打开IDEA创建 SpringBoot项目
  • 删除父项目中的src模块
  • 新建两个子项目(新建时会重新创建父项目src文件,删除即可)
    • 子项目:mall-Ares
    • 子项目:mall-angel
  • deity build.gradle 配置全局配置
  • mall-Ares 和 mall-angelbuild.gradle 负责引入依赖的jar

1.1、IDEA中主要图示

1.1.1 项目结构图

在这里插入图片描述

1.1.2 IDEA中 Gradle配置

在这里插入图片描述

1.2、deity父项目build.gradle文件

//所有buildscript{}块都必须出现在脚本中任何插件{}块之前
buildscript{ //构建gradle脚本自身需要的资源,可以声明的资源包括依赖项、第三方插件、maven仓库等等

    //统一依赖版本管理
    ext{
        mysqlVersion     = "8.0.32"  //mysql
        fastjsonVersion  = "2.0.29" //fastjson
        lombokVersion    = '1.18.26' //lombok
        springBootVersion= '3.0.2' //springBoot
        springCloudVersion= '2022.0.2' //springCloud
        springCloudAlibabaVersion='2022.0.0.0-RC2'//cloudAlibaba 2022.0.0.0-RC2
        mybatisPlusVersion   = '3.5.3.1' //mybatisPlus

    }

    //buildscript脚本构建时需要去寻找的仓库
    repositories { //从前往后顺序执行,找不到就向后查找
//		mavenLocal() //从maven本地仓库下载jar到gradle仓库
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/repository/grails-core'}
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }
        maven {
            url 'http://mirrors.huaweicloud.com/repository/maven/'
            allowInsecureProtocol = true
        }
        mavenCentral()
    }

    //构建用到的插件
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:1.1.0'//maven方式插件
    }

}

//插件要在最上边初始化
plugins{
    id 'org.springframework.boot' version '3.0.2'
    id 'io.spring.dependency-management' version '1.1.0'//创建于 2022 年 10 月 18 日。   2023.05.08目前为最新版本
    id 'idea'
}


//针对所有project的配置,包含根项目,除此之外还有subprojects 和 project,感兴趣的童鞋可以自行百度查阅
allprojects{
    apply plugin: 'java'	//项目是java项目
    apply plugin: 'idea'	//项目是idea项目
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management' //类似于maven的版本管理方式
    group = 'com.dage'
    version = '0.0.1-SNAPSHOT'
    //jdk版本
    sourceCompatibility = '17'
    targetCompatibility = '17'

    //必须在插入 java插件后 执行该命令
    configurations {
        compileJava{
            extendsFrom annotationProcessor
        }
    }

    //所有project项目的 jar获取方式
    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
        options.deprecation = true
    }

    //全局配置时查找依赖的使用
    repositories{ //从前往后顺序执行,找不到就向后查找
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/repository/grails-core'}
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }
        maven {
            url 'http://mirrors.huaweicloud.com/repository/maven/'
            allowInsecureProtocol = true
        }
        mavenCentral()
    }
}

subprojects{// 子项目配置(可以理解为子模块的全局配置)
    sourceCompatibility = '17'
    targetCompatibility = '17'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management' //类似于maven的版本管理方式

    //子model统一jar引入
    dependencies {
        annotationProcessor 'org.projectlombok:lombok' //注释处理器
        implementation 'org.projectlombok:lombok'//引入lombok依赖
    }

    //提供类似 Maven 的依赖管理和排除的 Gradle 插件
    //使用类似于maven的方式(io.spring.dependency-management) 统一版本管理
    //https://docs.spring.io/dependency-management-plugin/docs/current/reference/html/#pom-generation  学习网址
    //DSL 允许您使用:分隔的字符串来声明依赖管理,以配置托管依赖的坐标
    dependencyManagement {
        dependencies{//统一版本管理
            //DSL 允许您使用:分隔的字符串来声明依赖管理,以配置托管依赖的坐标
            dependency "mysql:mysql-connector-java:${mysqlVersion}"
            dependency "org.projectlombok:lombok:${lombokVersion}"
            dependency "com.baomidou:mybatis-plus-boot-starter:${mybatisPlusVersion}"
            dependency "com.baomidou:mybatis-plus-generator:${mybatisPlusVersion}"
            dependency "org.springframework.boot:spring-boot-starter-web:${springBootVersion}"
            dependency "org.apache.velocity:velocity-engine-core:${velocityVersion}"

        }

        imports {
            //引入 spring-cloud统一包管理
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
            //引入 spring-cloud-alibaba统一包管理
            mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
            //引入 spring-boot统一包管理
            mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
        }
    }

}


//禁止根项目一切行为(不影响模块)
//禁用以后执行build的时候不会构建parent项目
tasks.forEach {
    it.enabled = false
}


/**
 * Gradle打标准jar包
 * 根项目需禁用springboot插件,否则会构建失败
 * 光禁用BootJar是不行的,还要启用Jar。
 * GroovyDSL的写法,对KotlinDSL无效
 */
bootJar{enabled = false}

jar{enabled=true}
/**    KotlinDSL写法
 * tasks.bootJar {enabled = false}
 * tasks.jar {enabled = true}
 */


tasks.named('test') {
    useJUnitPlatform()
}

1.3、deity父项目settings.gradle文件

注意这里,子项目是没有settings.gradle文件的。全局只有一个settings.gradle文件

pluginManagement {
    repositories {
        //        mavenLocal() //从maven本地仓库下载jar到gradle仓库 【两者】
        maven { url 'https://maven.aliyun.com/repository/public/' }
        // 新增
        maven {url 'https://maven.aliyun.com/repository/grails-core'}
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }
        maven {
            url 'http://mirrors.huaweicloud.com/repository/maven/'
            allowInsecureProtocol = true
        }
        maven { url 'https://repo.spring.io/milestone' }
        maven { url 'https://repo.spring.io/snapshot' }
        mavenCentral() //maven中央仓库
        gradlePluginPortal()
    }
}


rootProject.name = 'deity'
include 'mall-Ares'
include 'mall-angel'


此时我们在看 settings.gradle 文件,就会发现,已经自动生成了子模块引入目录

1.4、子项目build.gradle

mall-Ares 和 mall-angel两个子项目

这里注意,子项目只需要这么多配置参数,如果需要其他jar继续在dependencies {}中引入即可。(所有子项目配置均一致)


//子项目需要的jar包
dependencies {
    //SpringBoot启动项引入
    implementation 'org.springframework.boot:spring-boot-starter-web'

}

// 动态移除对kotlin构建插件的权限,避免子模块构建报错
tasks.register("prepareKotlinBuildScriptModel") {}

1.5、子项目中的 application.yml 配置

1.5.1、mall-Ares application.yml

server:
  port: 8082

1.5.2、mall-angelapplication.yml

server:
  port: 8083

1.6、测试Controller

1.6.1、mall-Ares测试代码

package com.dage.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("test/")
public class TestController {

    @RequestMapping("one")
    public String one(){
        return "欢迎来到java17";
    }
}

1.6.2、mall-angel测试代码

package com.dage.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("test/")
public class TestController {
    @RequestMapping("one")
    public String one(){
        return "欢迎来到gradle7.6.1";
    }
}

1.7、测试是否启动

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、创建gitee仓库,推送到远端

2.1、登录gitee新建仓库(deity

仓库名称要项目名称一致,这里仓库名称为:deity

在这里插入图片描述

2.1.1、得到如下命令(新建仓库,使用创建git仓库 即可)

简易的命令行入门教程:
Git 全局设置:

git config --global user.name "xxx"
git config --global user.email "xxxx@126.com"
创建 git 仓库:

mkdir gods
cd gods
git init 
touch README.md
git add.
git commit -m "first commit"
git remote add origin https://gitee.com/xxxxxxxx/gods.git
git push -u origin "master"
已有仓库?

cd existing_git_repo
git remote add origin https://gitee.com/xxxxxxx/gods.git
git push -u origin "master"

这里是需要 使用 git的,需要自己去安装,这里不做阐述
这里使用 git add. 把所有文件添加到暂存区

2.2、git执行命令

在项目根目录下执行命令
这里记得吧 xxxxx更换为自己的地址

  1. 打开git,进入项目文件中
  2. git init 初始化git
  3. touch README.md 创建版本文件
  4. git status 查看当前工作区文件状态
  5. git add . 上传所有文件到 暂存区
  6. git commit -m " 提交注释" 提交文件到本地仓库
  7. git remote add origin https://gitee.com/xxxxxxxx/gods.git 添加远程仓库origin ,建立关联
  8. git push -u origin "master" 把当前分支master 推送到远程仓库 origin

2.2.1、IDEA中可以验证代码是否上传仓库成功

在这里插入图片描述

2.2.2、在gitee仓库中查看代码是否上传成功

在这里插入图片描述

2.3、git 常用知识浅谈

在这里插入图片描述
PS:图片来源

workspace:工作区,平时存放代码的位置 staging
area:暂存区/缓存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息 local
repository:本地仓库,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本 remote
repository:远程仓库,托管代码的服务器

代码从修改到提交到远程仓库,一般需要经历如下5个状态:未修改,已修改,已暂存,已提交,已推送。如下所示:

未修改
       原始内容
已修改    ↓   
       工 作 区
已暂存    ↓    git add
       暂 存 区
已提交    ↓    git commit
       本地仓库
已推送    ↓    git push
       远程仓库

注意事项

git init会在项目根目录下初始化一个.git目录,git仓库必须
remote只需执行一次,yourRepository.git是你在github已有的一个仓库
.gitignore,这个文件写入所有不需要加入版本管理的文件,尤其像node_modules

三、Nacos 服务注册 SpringCloud Alibaba

3.1、启动win下的单机nacos

我这里是安装的: NACOS 2.2.2

  1. 第一步:下载nacos到本地之后,打开文件至bin目录,输入cmd进入命令窗口

  2. 第二步:输入启动命令: startup.cmd -m standalone 可以看到启动成功

Linux/Unix/Mac:命令

startup.sh -m standalone

​ Windows:命令

startup.cmd -m standalone

  1. 第三步:启动成功后,浏览器打开网址:http://localhost:8848/nacos/
  2. 默认nacos/nacos,成功查看(单机不需要登录)

在这里插入图片描述

在这里插入图片描述

3.2、给项目创建一个命名空间

在这里插入图片描述

PS: 这里 命名空间ID 要着重记忆

3.3、引入新的需要的依赖

这里要在两个子项目中的dependencies{}中添加如下依赖
这是一种 基于 maven方式的 gradle插件在管理依赖,如果需要,请跳转目录:1.2

    //    SpringCloud Alibaba nacos服务发现
    implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {
        exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-netflix-ribbon'
    }
    //用于简化配置管理和外部化配置
    //可以从远程配置服务器(如 Git 存储库)中获取应用程序的配置信息,然后将这些配置信息注入到应用程序中
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

3.3.1 子项目依赖更新图

在这里插入图片描述

3.4、 启动类添加 @EnableDiscoveryClient 注解

@EnableDiscoveryClient 是 Spring Cloud 的一个注解,用于启用服务发现功能

package com.dage;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class AresSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(AresSpringBootApplication.class,args);
    }
}

3.5 、创建bootstrap.yml进行配置

这里因为我有两个子项目,便于理解,我贴出了两个配置
这里的命名空间ID 就是 目录 3.2中需要注意的内容
这里要注意的一点是:application.yml中的server.port 配置我拿到了 bootstrap.yml中
所以现在 application.yml是空的。

server:
  port: 8082
spring:
  application:
    name: mall-Ares
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        enabled: true
        namespace: deity88481314 #命名空间ID

server:
  port: 8083
spring:
  application:
    name: mall-angel
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        enabled: true
        namespace: deity88481314 #命名空间ID

3.6、在nacos管理平台中查看注册进入的服务

在这里插入图片描述

测试完成

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

django ORM框架 第四章 聚合函数

上一章:django ORM框架 第三章 关联表的数据创建与查询_做测试的喵酱的博客-CSDN博客 一、聚合函数类型: from django.db.models import Q, Count, Avg, Max, Min 班级表: 学生信息表: 1.1 Count 模版: QuerySet.…

3 手工推导Neural Networ

线性模型假设的问题 如上图,对非线性类边界的数据进行分类 一个解决方案是将数据映射到更高维的空间,就变成线性可分的了。 ϕ \phi ϕ 是一个映射函数,将x从一个低维空间映射到高维空间。 ϕ \phi ϕ 可不可以是一个线性函数? …

音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境

安装vs2019qt,并且在windows环境上安装ffmpeg,尝试使用qtcdb进行调试,尝试使用vs2019加载qt的程序。 安装VS20195.12.2qt环境,并进行测试。 1:安装Visual Studio 2019, a.从官网下载,或者vs2019社区版本下载地址 ht…

Cloud Studio 内核升级之触手可及

前言 Cloud Studio是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能使用。云端开发体验与本地几乎一样,上手门槛更低&#x…

前端axios fetch 解决接口请求响应数据返回快慢不均导致的数据错误问题

引言 搜索功能,我想很多业务都会涉及,这个功能的特点是: 用户可以在输入框中输入一个关键字,然后在一个列表中显示该关键字对应的数据;输入框是可以随时修改/删除全部或部分关键字的;如果是实时搜索&…

查看电脑的BIOS版本的五种方法

查看主板BIOS版本的五种方法 概述1. 在 BIOS 中查看2. 使用 DirectX 诊断工具3. 使用 CPU-Z 中查看4. 在 CMD 中查看(一)5. 在 CMD 中查看 (二)结束语 概述 BIOS是 Basic Input Output System 的缩略词,直译就是 **基…

【数据结构与算法】- 周测四

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

InnoDB数据页结构

什么是页?什么是数据页? 页是InnoDB管理存储空间的基本单元,一个页的大小一般是16k。 InnoDB有许多不同的页,有存放表空间头部信息的页,INODE信息的页,当然还有存放我们记录信息的页,这个页叫…

车载以太网 - SomeIP - 协议用例 - Messages_01

目录 Service Discovery Messages 1、验证Instance ID为0xFFFF时DUT需要返回该Serveice ID包含的所有Instance ID

「实验记录」MIT 6.824 Raft Lab2B Log Replication

#Lab2B - Log Replication I. SourceII. My CodeIII. MotivationIV. SolutionS1 - leader上任即初始化S2 - leader发送AppendEntriesS3 - follower接收AppendEntriesS4 - leader收到AppendEntries 回信S5 - candidate选举限制S6 - defs.go约定俗成和实现Start() V. Result I. S…

LeetCode 栈和队列OJ题目分享

目录 有效的括号(括号匹配)用栈实现队列用队列实现栈设计循环队列 有效的括号(括号匹配) 链接: link 题目描述: 题目思路: 1、如果是左括号“( { [ ”就入栈 2、如果是右括号“) }…

程序员:面试造火箭,入职拧螺丝?太难了···

刚开始工作的时候,我也想不通这个问题,甚至很鄙视这种现象。后面当了面试官,做到了公司中层管理,也会站在公司以及行业角度去重新思考这个问题。 为什么这种现象会越来越普遍呢?尤其在 IT 行业愈加明显。 面试看的是…

Packet Tracer – VLAN 实施故障排除场景 2

Packet Tracer – VLAN 实施故障排除场景 2 拓扑图 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 S1 VLAN 56 192.168.56.11 255.255.255.0 不适用 S2 VLAN 56 192.168.56.12 255.255.255.0 不适用 S3 VLAN 56 192.168.56.13 255.255.255.0 不适用 P…

头歌计算机组成原理实验—运算器设计(11)第11关:MIPS运算器设计

第11关:MIPS运算器设计 实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的32位加法器、 Logisim 中的运算组件构造指…

图神经网络:(处理点云)PointNet++的实现

文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 简单前置工作学习文献阅读PointNet的实现模型问题 简单前置工作…

智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线

平升电子智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线-智慧井盖,实现对井下设备和井盖状态的监测及预警,是各类智慧管网管理系统中不可或缺的重要设备,解决了井下监测环境潮湿易水淹、电力供应困难、通讯不畅等难题…

XDP入门--BPF程序如何转发报文到其它网卡

本文目录 1、测试环境:2、实现的功能,使用bpf_redirect直接转发收到的报文到另外一张网卡3、测试步骤与测试结果 1、测试环境: 参照把树莓派改造成无线网卡(3)-----共享无线网络,无线网络转换成有线网络,让有线网络设…

插入排序、选择排序、冒泡排序小结(45)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 插入排序、选择排序、冒泡排序有什么区别? 原理不同 插入排序是将未排序的元素逐个插入到已排序序列中…

Unity之ASE从入门到精通 目录

前言 Amplify Shader Editor (ASE) 是受行业领先软件启发的基于节点着色器创建工具。它是一个开放且紧密集成的解决方案,提供了熟悉和连贯的开发环境,使 Unity 的 UI 约定和着色器的使用无缝地融合一起 目录 这里是ASE从入门到精通专栏的目录,不停更新中,有问题随时留…

入门JavaScript编程:上手实践四个常见操作和一个轮播图案例

部分数据来源:ChatGPT 简介 JavaScript是一门广泛应用于Web开发的脚本语言,它主要用于实现动态效果和客户端交互。下面我们将介绍几个例子,涵盖了JavaScript中一些常见的操作,包括:字符串、数组、对象、事件等。 例子…