这是一个大胆的决定
技术栈
技术 | 版本 |
---|---|
spring-boot | 3.0.2 |
spring-cloud | 2022.0.2 |
spring-cloud-alibaba | 2022.0.0.0-RC2 |
mybatis-plus-boot-starter | 3.5.3.1 |
mysql-connector-java | 8.0.32 |
开发工具
技术 | 版本 |
---|---|
java | 17 |
gradle | 7.6.1 |
IDEA | 2022.2.4 |
Nvcat | 15 |
MySQL | 8.0.32 |
一、创建gradle父子项目(deity)
1.0 简单流程示意
- 打开IDEA创建 SpringBoot项目
- 删除父项目中的src模块
- 新建两个子项目(新建时会重新创建父项目src文件,删除即可)
- 子项目:
mall-Ares
- 子项目:
mall-angel
- 子项目:
- 父
deity
build.gradle 配置全局配置 - 子
mall-Ares 和 mall-angel
build.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-angel
application.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
更换为自己的地址
- 打开git,进入项目文件中
-
git init
初始化git -
touch README.md
创建版本文件 -
git status
查看当前工作区文件状态 -
git add .
上传所有文件到 暂存区 -
git commit -m " 提交注释"
提交文件到本地仓库 -
git remote add origin https://gitee.com/xxxxxxxx/gods.git
添加远程仓库origin
,建立关联 -
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
-
第一步:下载nacos到本地之后,打开文件至bin目录,输入cmd进入命令窗口
-
第二步:输入启动命令: startup.cmd -m standalone 可以看到启动成功
Linux/Unix/Mac:命令
startup.sh -m standalone
Windows:命令
startup.cmd -m standalone
- 第三步:启动成功后,浏览器打开网址:http://localhost:8848/nacos/
- 默认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管理平台中查看注册进入的服务
文章来源:https://www.toymoban.com/news/detail-456089.html
测试完成文章来源地址https://www.toymoban.com/news/detail-456089.html
到了这里,关于使用Gradle7.6.1 + SpringBoot3.0.2 + java17创建微服务项目(学习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!