Spring Cloud Alibaba 学习实践(二)

发布时间 2023-09-19 16:03:00作者: 疑问号?

创建项目基本结构

使用idea 创建父工程

image

image

编辑 settings.gradle.kts

rootProject.name = "sca-demo"

rootProject.children.forEach { project ->
    project.buildFileName = "${project.name}.gradle.kts"
    project.children.forEach { pro ->
        pro.buildFileName = "${pro.name}.gradle.kts"
    }
}

编辑父工程的build.gradle.kts

plugins {
    id("java")
    id("idea")
    id("java-library")
    id("org.springframework.boot") version "2.6.13"
    id("io.spring.dependency-management") version "1.1.3"
}

group = "com.anbuis.sca"
version = "1.0-SNAPSHOT"

repositories {
    mavenLocal()
    maven("https://maven.aliyun.com/nexus/content/repositories/google")
    maven("https://maven.aliyun.com/nexus/content/groups/public")
    maven("https://maven.aliyun.com/nexus/content/repositories/jcenter")
    maven("https://plugins.gradle.org/m2/")
    mavenCentral()
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

val lombokVersion = "1.18.26"
val springCloudVersion = "2021.0.5"
val springCloudAlibabaVersion = "2021.0.5.0"
val hutoolVersion = "5.8.16"
val knife4jVersion = "4.1.0"
val fastjsonVersion = "2.0.28"
val swaggerAnnotationVersion = "2.2.8"

subprojects {
    apply {
        plugin("java")
        plugin("idea")
        plugin("java-library")
        plugin("org.springframework.boot")
        plugin("io.spring.dependency-management")
    }

    group = "com.anbuis.shop"
    version = "1.0-SNAPSHOT"

    repositories {
        mavenLocal()
        maven("https://maven.aliyun.com/nexus/content/repositories/google")
        maven("https://maven.aliyun.com/nexus/content/groups/public")
        maven("https://maven.aliyun.com/nexus/content/repositories/jcenter")
        maven("https://plugins.gradle.org/m2/")
        mavenCentral()
    }

    java {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    springBoot {
        buildInfo()
    }

    // 所有子模块都会有的依赖
    dependencies {
        // Hutool
        implementation("cn.hutool:hutool-all")
        // FastJson
        implementation("com.alibaba.fastjson2:fastjson2")
        // SpringDoc Swagger Annotation
        implementation("io.swagger.core.v3:swagger-annotations")
        // Junit Test
        implementation("org.springframework.boot:spring-boot-starter-test")

        // Lombok
        compileOnly("org.projectlombok:lombok:${lombokVersion}")
        annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
        testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
        testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    }

    dependencyManagement {
        // 导入SpringCloud和SpringCloudAlibaba对应的依赖
        imports {
            mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
            mavenBom("com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}")
        }

        // 定义依赖,后续子模块中就可以不用写版本号
        dependencies {
            dependency("cn.hutool:hutool-all:${hutoolVersion}")
            dependency("com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:${knife4jVersion}")
            dependency("com.alibaba.fastjson2:fastjson2:${fastjsonVersion}")
            dependency("io.swagger.core.v3:swagger-annotations:${swaggerAnnotationVersion}")
        }
    }

    tasks.jar {
        enabled = true
    }

    tasks.test {
        useJUnitPlatform()
    }
}

创建子模块

common 公共模块(所有项目都有可能使用的工具,数据结构,异常等)

mvc-config MVC公共配置模块(所有需要用到MVC的模块使用到的公共配置)

service 微服务模块(微服务模块的父模块)

:service:service-config 微服务通用配置模块(微服务需要使用到的公共配置,如SpringDoc,OpenFeign,Seata,Ribbon,loadbalancer,mybatis-plus,日志收集等)

:service:service-sdk 微服务开发工具包模块(微服务间的请求通讯的服务开发工具集,后续如果会开放的话,可以通过这个jar包进行一个SpringBoot的自动配置)

:service:user-service 用户微服务模块(主要是用户相关服务请求处理)

:service:order-service 订单微服务模块(主要是订单香港服务请求处理)

image

将子模块添加到 settings.gradle.kts 文件中,类似maven中的

rootProject.name = "sca-demo"

include(
        "common",
        "mvc-config",
        "service",
        ":service:service-config",
        ":service:service-sdk",
        ":service:user-service",
        ":service:order-service"
)

rootProject.children.forEach { project ->
    project.buildFileName = "${project.name}.gradle.kts"
    project.children.forEach { pro ->
        pro.buildFileName = "${pro.name}.gradle.kts"
    }
}

刷新gradle依赖之后,得到的目录结构如下:

image

以上就是项目前期的基本架构