分布式架构工程(敏捷开发)

妖精的绣舞 提交于 2020-08-05 04:35:27

传送门:https://gitee.com/hackerjj/java

架构

GitLab 项目群

依照下列顺序创建即可

  • jcloud-dependencies: 通用依赖版本控制:依赖于一个二方库群时,必须定义一个统一的版本变量,避免版本号不一致。
  • jcloud-parent: 通用父工程:产品线下的所有项目必须指定一个父工程项目,以复用 POM 的 `` 配置
  • jcloud-commons: 通用类库工具类:如 HuTool 等开源类库依赖或二次开发等
  • jcloud-generator: 通用代码生成器:如 MyBatis Plus 等其它开源类库或自定义代码生成器
  • jcloud-repository: 数据访问层:与底层 MySQL、 Oracle、 Hbase 等进行数据交互。
  • jcloud-business: 业务逻辑层:相对具体的业务逻辑服务层。
  • jcloud-manager: 通用处理层:对第三方平台封装的层,预处理返回结果及转化异常信息。对业务逻辑层通用能力的下沉,如缓存方案、 中间件通用处理。与数据访问层交互,对多个数据访问层的组合复用。
  • jcloud-controller: 请求处理层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
  • jcloud-apiserver: 开放接口网关层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 HTTP 接口; 进行网关安全控制、 流量控制等。
  • jcloud-cloud: 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。
  • jcloud-oauth: 认证与授权:独立的认证与授权服务
  • jcloud-all: 单体应用打包器:适用于产品的初期运营阶段,利用单体应用的便利性先上线属于临时过渡项目。
  • jcloud-dashboard: 终端显示层:前后分离方案,采用 Vue + ElementUI 组件库实现的平台控制面板项目。
  • jcloud-portal: 终端显示层:前后分离方案,采用 Vue + Vuetify 组件库实现的平台门户网站项目。
  • bin: 用于存放构建工具的目录
  • docs: 用于存放项目文档的目录

拉取代码到本地

在本地磁盘创建专门用于存放项目源码的目录,目录结构如下:

├─jcloud-services
│  ├─bin
│  ├─docs
│  ├─jcloud-all
│  ├─jcloud-apiserver
│  ├─jcloud-business
│  ├─jcloud-cloud
│  ├─jcloud-commons
│  ├─jcloud-controller
│  ├─jcloud-dependencies
│  ├─jcloud-generator
│  ├─jcloud-manager
│  ├─jcloud-oauth
│  ├─jcloud-parent
│  └─jcloud-repository
└─jcloud-views
    ├─jcloud-dashboard
    └─jcloud-portal

所有项目源码均由 Git 托管,需要 Git 配置文件,Java 项目所需的配置

  • .gitattributes
# Windows-specific files that require CRLF:
*.bat       eol=crlf
*.txt       eol=crlf

# Unix-specific files that require LF:
*.java      eol=lf
*.sh        eol=lf
  • .gitignore
target/
!.mvn/wrapper/maven-wrapper.jar

## STS ##
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans

## IntelliJ IDEA ##
.idea
*.iws
*.iml
*.ipr

## JRebel ##
rebel.xml

## MAC ##
.DS_Store

## Other ##
logs/
temp/

注意: 前端项目由 Vue CLI 生成,无需手动创建

后端工程配置

通用依赖

dependencies

通用依赖版本控制:依赖于一个二方库群时,必须定义一个统一的版本变量,避免版本号不一致。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jcloud</groupId>
    <artifactId>jcloud-dependencies</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>通用依赖-Dependencies</description>

    <!-- 软件配置管理:配合 maven-release-plugin 插件使用 -->
    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-dependencies.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-dependencies.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-dependencies</url>
    </scm>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Spring Projects   -->
        <spring-boot.version>2.3.0.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
        <spring-cloud-alibaba.verion>2.2.1.RELEASE</spring-cloud-alibaba.verion>

        <!-- Cloud Service   -->
        <qiniu.version>7.2.29</qiniu.version>

        <!-- Tools   -->
        <mybatis-plus.version>3.3.1</mybatis-plus.version>
        <hutool.version>5.3.5</hutool.version>

        <!-- Projects   -->
        <jcloud.version>1.0.0.RELEASE</jcloud.version>
        <jcloud.development.version>1.0.1-SNAPSHOT</jcloud.development.version>
    </properties>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <!-- 发布项目到 Nexus   -->
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>http://nexus.funtl.com/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://nexus.funtl.com/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot   -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Spring Cloud   -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Spring Cloud Alibaba   -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.verion}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- MyBatisPlus   -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>

            <!-- HuTool   -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <!-- 七牛云   -->
            <dependency>
                <groupId>com.qiniu</groupId>
                <artifactId>qiniu-java-sdk</artifactId>
                <version>${qiniu.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
	
    <!-- Maven 多环境配置   -->
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- 用于自动发布 RELEASE TAG   -->
                <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
                <!-- 配合 maven-release-plugin 插件发布到 Git(GitLab,GitHub 等)   -->
                <maven-scm-provider-jgit-plugin.version>1.9.5</maven-scm-provider-jgit-plugin.version>
                <!-- Spring 提供的代码美化插件   -->
                <spring-javaformat-maven-plugin.version>0.0.22</spring-javaformat-maven-plugin.version>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.spring.javaformat</groupId>
                        <artifactId>spring-javaformat-maven-plugin</artifactId>
                        <version>${spring-javaformat-maven-plugin.version}</version>
                    </plugin>

                    <!-- mvn scm   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>${maven-release-plugin.version}</version>
                        <configuration>
                            <providerImplementations>
                                <git>jgit</git>
                            </providerImplementations>
                            <username>root</username>
                            <password>12345678</password>
                            <tagBase>${project.artifactId}-${project.version}</tagBase>
                            <goals>-f pom.xml deploy</goals>
                            <releaseLabel>${jcloud.version}</releaseLabel>
                            <releaseVersion>${jcloud.version}</releaseVersion>
                            <developmentVersion>${jcloud.development.version}</developmentVersion>
                            <preparationGoals>clean verify</preparationGoals>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.maven.scm</groupId>
                                <artifactId>maven-scm-provider-jgit</artifactId>
                                <version>${maven-scm-provider-jgit-plugin.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

下面的仓库地址已全部配置到 Nexus 中,此处仅当作记录

<repositories>
    <repository>
        <id>aliyun-nexus</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>

    <repository>
        <id>spring-milestone</id>
        <name>Spring Milestone</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshot</id>
        <name>Spring Snapshot</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>spring-milestone</id>
        <name>Spring Milestone</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>spring-snapshot</id>
        <name>Spring Snapshot</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

parent

通用父工程:产品线下的所有项目必须指定一个父工程项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>

    <groupId>com.jcloud</groupId>
    <artifactId>jcloud-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>通用依赖-Parent</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-parent.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-parent.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-parent</url>
    </scm>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Projects   -->
        <jcloud.version>1.0.0.RELEASE</jcloud.version>
        <jcloud.development.version>1.0.1-SNAPSHOT</jcloud.development.version>
    </properties>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>http://nexus.funtl.com/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://nexus.funtl.com/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.jcloud</groupId>
                <artifactId>jcloud-dependencies</artifactId>
                <version>${project.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- Maven 多环境配置   -->
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
                <maven-install-plugin.version>3.0.0-M1</maven-install-plugin.version>
                <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
                <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
                <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
                <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version>
                <maven-scm-provider-jgit-plugin.version>1.9.5</maven-scm-provider-jgit-plugin.version>
                <spring-javaformat-maven-plugin.version>0.0.22</spring-javaformat-maven-plugin.version>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.spring.javaformat</groupId>
                        <artifactId>spring-javaformat-maven-plugin</artifactId>
                        <version>${spring-javaformat-maven-plugin.version}</version>
                    </plugin>

                    <!-- mvn clean   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-clean-plugin</artifactId>
                        <version>${maven-clean-plugin.version}</version>
                        <configuration>
                            <filesets>
                                <!-- 清理 JRebel 产生的备份文件   -->
                                <fileset>
                                    <directory>${basedir}/**</directory>
                                    <includes>
                                        <include>.rebel.xml.bak</include>
                                    </includes>
                                </fileset>
                            </filesets>
                        </configuration>
                    </plugin>

                    <!-- mvn install   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-install-plugin</artifactId>
                        <version>${maven-install-plugin.version}</version>
                    </plugin>

                    <!-- JavaDoc 生成插件   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${maven-javadoc-plugin.version}</version>
                        <configuration>
                            <!-- 生成 HTML 后 title 的名字   -->
                            <windowtitle>千锋达摩院 ${project.version} JavaDocs</windowtitle>
                            <!--
                                解决控制台乱码问题
                                需要在【环境变量】中添加【系统变量】
                                - 变量名:JAVA_TOOL_OPTIONS
                                - 变量值:-Dfile.encoding=UTF-8
                               -->
                            <charset>UTF8</charset>
                            <encoding>UTF8</encoding>
                            <docencoding>UTF8</docencoding>
                            <!--
                                生成 JavaDoc 所在目录:reportOutputDirectory/destDir
                                - reportOutputDirectory:输出的目录位置
                                - destDir:文档生成的目录位置
                               -->
                            <destDir>javadocs</destDir>
                            <reportOutputDirectory>${basedir}/docs</reportOutputDirectory>
                        </configuration>
                    </plugin>

                    <!-- 测试用例插件   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven-surefire-plugin.version}</version>
                        <configuration>
                            <!-- 设置默认跳过测试   -->
                            <skip>true</skip>
                            <includes>
                                <include>**/*Tests.java</include>
                            </includes>
                            <excludes>
                                <exclude>**/Abstract*.java</exclude>
                            </excludes>
                            <systemPropertyVariables>
                                <java.security.egd>file:/dev/./urandom</java.security.egd>
                                <java.awt.headless>true</java.awt.headless>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>

                    <!--
                        依赖冲突检查
                        在进行 mvn clean package 的时候,会在 console 中打印出冲突的 jar 版本和其父 pom
                       -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <version>${maven-enforcer-plugin.version}</version>
                        <executions>
                            <execution>
                                <id>enforce-rules</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <bannedDependencies>
                                            <excludes>
                                                <exclude>commons-logging:*:*</exclude>
                                            </excludes>
                                            <searchTransitive>true</searchTransitive>
                                        </bannedDependencies>
                                    </rules>
                                    <fail>true</fail>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- mvn scm   -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>${maven-release-plugin.version}</version>
                        <configuration>
                            <providerImplementations>
                                <git>jgit</git>
                            </providerImplementations>
                            <username>root</username>
                            <password>12345678</password>
                            <tagBase>${project.artifactId}-${project.version}</tagBase>
                            <goals>-f pom.xml deploy</goals>
                            <releaseLabel>${jcloud.version}</releaseLabel>
                            <releaseVersion>${jcloud.version}</releaseVersion>
                            <developmentVersion>${jcloud.development.version}</developmentVersion>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.maven.scm</groupId>
                                <artifactId>maven-scm-provider-jgit</artifactId>
                                <version>${maven-scm-provider-jgit-plugin.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

commons

通用类库工具类:如 HuTool 等开源类库依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-commons</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>通用依赖-Commons</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-commons.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-commons.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-commons</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <dependencies>
        <!-- Jackson   -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

独立项目

generator

通用代码生成器:如 MyBatis Plus 等其它开源类库或自定义代码生成器

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-generator</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>代码生成器</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-generator.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-generator.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-generator</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <dependencies>
        <!-- Datasource   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- MyBatisPlus   -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

数据持久层

repository

数据持久层:与底层 MySQL、 Oracle、 Hbase 等进行数据交互。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-repository</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>持久层</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-repository.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-repository.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-repository</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Boot   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- DataSource   -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- MyBatis Plus   -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <!-- Validator   -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

第三方平台

cloud

外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-cloud</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>第三方平台服务或其他部门开放接口</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-cloud.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-cloud.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-cloud</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Boot   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Spring Security   -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        </dependency>

        <!-- Tools   -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Projects   -->
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jcloud-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>

通用处理层

manager

通用处理层:对第三方平台封装的层,预处理返回结果及转化异常信息。对业务逻辑层通用能力的下沉,如缓存方案、 中间件通用处理。与数据访问层交互,对多个数据访问层的组合复用。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-manager</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>通用处理层</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-manager.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-manager.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-manager</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Boot   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Projects   -->
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jcloud-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>

业务逻辑层

business

业务逻辑层:相对具体的业务逻辑服务层。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-business</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>业务逻辑层</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-business.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-business.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-business</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Boot   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Projects   -->
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>jcloud-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>

认证与授权

oauth

认证与授权:独立的认证与授权服务

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-oauth</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>认证与授权</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-oauth.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-oauth.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-oauth</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <dependencies>
        <!-- Spring Cloud   -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>

        <!-- Servlet   -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- JUnit   -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Tools   -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <!-- 临时过渡:这里是为了使用 HuTool 发送邮件   -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <profiles>
        <!--
            Spring Boot 应用不能直接被当作类库依赖
            通过 Maven 多环境配置功能解决
           -->
        <profile>
            <id>microservice</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <mainClass>com.jcloud.oauth.AuthApplication</mainClass>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

请求处理层

controller

请求处理层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-controller</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>请求处理层</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-controller.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-controller.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-controller</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Boot   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Spring Security   -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        </dependency>

        <!-- Commons   -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

开放接口网关层

apiserver

开放接口网关层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 HTTP 接口; 进行网关安全控制、 流量控制等。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-apiserver</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>开放接口网关层</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-apiserver.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-apiserver.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-apiserver</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <modules>
        <!-- 服务模块   -->
    </modules>

    <dependencies>
        <!-- Spring Cloud   -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

单体应用打包器

all

单体应用打包器:适用于产品的初期运营阶段,利用单体应用的便利性先上线属于临时过渡项目。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.jcloud</groupId>
        <artifactId>jcloud-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jcloud-all</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <url>http://www.jcloud.com</url>
    <inceptionYear>2020-Now</inceptionYear>
    <description>单体应用打包器</description>

    <scm>
        <connection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-all.git</connection>
        <developerConnection>scm:git:http://gitlab.funtl.com/jcloud/jcloud-all.git</developerConnection>
        <url>http://gitlab.funtl.com/jcloud/jcloud-all</url>
    </scm>

    <developers>
        <developer>
            <id>HJJ</id>
            <name>Huang Junjun</name>
            <email>hjjaddmin@gmail.com</email>
        </developer>
    </developers>

    <dependencies>
        <!-- 需要打包进单体的服务   -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.jcloud.all.AllApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!