Gradle7.6.1 + SpringBoot3.0.2 + java17を使ってマイクロサービスプロジェクトを作成する(学習)

这是一个大胆的决定

ここがナビゲーションです

テクノロジースタック

テクノロジー バージョン
スプリングブーツ 3.0.2
春の雲 2022.0.2
春雲アリババ 2022.0.0.0-RC2
mybatis-plus-ブートスターター 3.5.3.1
mysql-コネクタ-java 8.0.32

開発ツール

テクノロジー バージョン
ジャワ 17
グラドル 7.6.1
アイデア 2022.2.4
Nvcat 15
MySQL 8.0.32

1. Gradleの親子プロジェクトを作成する( deity)

1.0 簡単なプロセスの概略図

  • IDEA を開いて SpringBoot プロジェクトを作成する
  • 親プロジェクトの src モジュールを削除します。
  • 新しいサブプロジェクトを 2 つ作成します (新しいサブプロジェクトを作成すると、親プロジェクトの src ファイルが再作成されます。削除するだけです)。
    • サブ項目:mall-Ares
    • サブ項目:mall-angel
  • 親のdeitybuild.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 ファイルはグローバルに 1 つだけあります

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-angel2つのサブアイテム

ここで、サブプロジェクトに必要な設定パラメーターは非常に多くのみであることに注意してください。他の 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-Aresapplication.yml

server:
  port: 8082

1.5.2、mall-angelapplication.yml

server:
  port: 8083

1.6. テストコントローラー

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. テストが開始されるかどうか

ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

2. gitee ウェアハウスを作成し、リモート エンドにプッシュします。

2.1. gitee にログインして新しいウェアハウスを作成します ( deity)

ウェアハウス名はプロジェクト名と同じである必要があります。ここではウェアハウス名は次のとおりです。deity

ここに画像の説明を挿入

2.1.1. 次のコマンドを取得します (新しいウェアハウスを作成するには、创建git仓库を使用するだけです)

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

git config --global user.name "xxx"
git config --global user.email "[email protected]"
创建 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 の一般知識の簡単な紹介

ここに画像の説明を挿入
追伸:画像ソース

ワークスペース: 作業領域。通常はコードが保存されます。 ステージング
領域: 一時ストレージ領域/キャッシュ領域。変更を一時的に保存するために使用されます。実際には単なるファイルです。ファイルリストに送信される情報を保存します。 ローカルリポジトリ:
ローカル安全な倉庫 データが保存される場所。すべてのバージョンに送信したデータが含まれます。HEAD がウェアハウスのリモート リポジトリに配置された最新バージョンを指す場所
: リモート ウェアハウス、サーバー ホスティング コード

変更からリモート ウェアハウスへの送信まで、コードは通常、未変更、変更、一時保存、送信、プッシュの 5 つの状態を通過する必要があります。次のように:

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

予防

git init は、プロジェクトのルート ディレクトリの下にある .git ディレクトリを初期化します。git ウェアハウスは
リモートである必要があり、実行する必要があるのは 1 回だけです。yourRepository.git は、github にすでにあるウェアハウスです。gitignore
、このファイルはすべてのユーザーに書き込まれます。バージョン管理に追加する必要のないファイル (特に、node_modules など)

3.Nacosサービス登録 SpringCloud Alibaba

3.1. win でスタンドアロン nacos を起動する

ここにインストールしました:NACOS 2.2.2

  1. ステップ 1: nacos をローカルにダウンロードした後、bin ディレクトリにあるファイルを開き、「cmd」と入力してコマンド ウィンドウに入ります。

  2. ステップ 2: 起動コマンドを入力します:startup.cmd -mstandalone 起動が成功したことがわかります。

Linux/Unix/Mac: コマンド

startup.sh -m standalone

Windows: コマンド

startup.cmd -m standalone

  1. ステップ 3: 起動が成功すると、ブラウザで URL: http://localhost:8848/nacos/ が開きます。
  2. デフォルトの nacos/nacos が正常に表示されました (単一マシンにログインする必要はありません)

ここに画像の説明を挿入

ここに画像の説明を挿入

3.2. プロジェクトの名前空間を作成する

ここに画像の説明を挿入

PS:ここでは 命名空间IDメモリに焦点を当てます

3.3. 新しく必要な依存関係を導入する

ここでは、2 つのサブプロジェクトに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 を作成する

ここでは分かりやすいようにサブプロジェクトが2つあるので2つの設定を掲載しましたディレクトリ3.2の注目すべき内容は以下の通りです
ここで注意すべき点はserver.portの設定ですapplication.yml で bootstrap.yml を取得したので、application.yml は空になりました。命名空间ID

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管理プラットフォームに登録および入力されたサービスの表示

ここに画像の説明を挿入

テストが終了しました

おすすめ

転載: blog.csdn.net/aaxzsuj/article/details/130816105