1 Star 0 Fork 185

9winer_ali / Ucode-Cms-Vue

forked from 赛泰先生 / Ucode-Cms-Vue 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

一、序言

UCode Cms是面向企业级应用软件开发的脚手架。希望构造一个合起来是一个系统,拆分出来是独立的组件,供其它项目复用。

本项目与其它项目的显著区别是拒绝摊大饼式功能集成,核心追求是代码和功能复用。

1、当前版本

Maven仓库访问地址

<version>1.5.5</version>

学习代码的朋友,记得给UCode CMS 来个star吧

2、使用说明

新时代的码农需要转变编码习惯,摒弃传统的CV开发依赖。实际上Java生态目前极其完善,从底层的JDK到Spring、SpringBoot,再到Apache Commons,再到Guava等几乎提供了95%实际问题的解决方案。

未来编程有几大趋势

  • 框架与框架整合

目前SpringBoot做的便是这件事,而且做的非常优秀。

  • 编写框架适配器

对于国外用户编写的框架,代码质量很高,美中不足的是对于国人的编码习惯不太友好。为了进一步提高编码效率,需要一些适配器工作。

  • 阅读底层框架API接口

上面已经分析了,现实中遇到的大部分问题不需要编码,已经有成熟的解决方案,那么知道解决方案在哪里变得极其重要,熟悉底层接口API变得很迫切。

  • 约定大于配置大于编码

一些朋友喜欢将本项目中封装好、并且发布到Maven中央仓库的代码CV到自己的项目中,起手式便是错误的。正确的做法是,先了解并使用已经开源项目的功能,满足不了功能时提Issue,然后才是自己造轮子。

03bdfbf761575480c59a18d28aa41ae0

二、项目基本情况

(一)项目特点

1、源码开源

源码开源并且使用MIT开源许可协议,个人或者企业用户免费放心使用,项目源码地址:

git clone https://gitee.com/decsa/ucode-cms-vue.git
2、快速上手

新建空项目,引入相关依赖,初始化数据库,启动项目,一个项目脚手架便搭建完成,更加便捷的操作是克隆[demo项目],修改数据库连接并启动项目。

<!--ucode-cms核心依赖-->
<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-spring-boot-starter</artifactId>
    <version>1.5.5</version>
</dependency>

(二)项目的内在逻辑

市面上各种管理系统做的非常好,作者无意重复造轮子,简要本项目的初衷。

大部分管理系统属于大杂烩性质的,说的难听点是堆砌功能,其实很多时候仅仅是想用其做个项目初始环境脚手架而已,并不想用过多的功能,齐全的功能此时却是累赘。

第一个特点:积木式结构。积木式结构允许使用者在核心依赖的基础上自由选择功能模块,体现的思想是功能复用,减少无意义的功能开发。

第二个特点:暴露配置。隐藏源码,暴露配置意味着使用者既能通过配置文件修改系统行为,又能较少的与不相干源码打交道。

第三个特点:标准化代码。鼓励使用者按照项目的框架提炼公共代码,按照类似插件性质予以封装,为本项目添砖加瓦。

1、标准化

标准化是UCodeCms项目的核心内涵,即将通用性的功能浓缩成不可修改的互相独立的Maven依赖,用户使用时可按需配置

2、高内聚低耦合

广泛使用高内聚低耦合设计原则,将用户很少修改的源码进行封装,同时对外提供可供修改配置的开关,降低使用成本。

3、积木式项目结构

核心依赖仅需要引入ucode-cms-spring-boot-starter便可初始化项目,starter内置其余核心依赖。

三、项目细节

(一)项目结构

UCode Cms源码项目结构如下

├── cms-ui                              // 系统UI部分源码
├── sql                                 // 系统数据库SQL脚本
├── ucode-cms-admin                     // 测试demo项目(非必选)
├── ucode-cms-code                      // 代码生成器源码
├── ucode-cms-code-spring-boot-starter  // 代码生成器starter
├── ucode-cms-common                    // 通用代码部分(核心依赖、可跨项目使用)
├── ucode-cms-excel                     // Excel处理模块源码
├── ucode-cms-framework                 // 核心依赖
├── ucode-cms-job                       // 任务调度源码
├── ucode-cms-monitor                   // 系统监控源码
├── ucode-cms-spring-boot-starter       // 核心starter
├── ucode-cms-system                    // 系统部分源码
└── ucode-cms-ui                        // 系统UI部分依赖

(二)项目依赖

UCode Cms使用的是热门主流框架依赖。

依赖 版本
JDK 1.8
Spring Framework 5
Spring Boot 2.6.3
Mybatis Plus 3.5.0
hutool 5.7.19
Guava 31.0.1-jre

四、对外复用依赖

本系统基于Spring生态,除了满足自身需求外,还能够以Maven依赖的方式对外提供功能和代码的复用。

(一)公共代码

公共代码依赖广泛应用于本项目中,同时也能以工具类的方式对外提供服务。

公共代码模块提供丰富的工具类支持,是整个项目的核心支撑。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-common</artifactId>
    <version>1.5.5</version>
</dependency>
1、请求合并

基于MybatisPlus提供一个内置封装的服务类QueueServiceImpl,透明的实现查询详情流量的合并与拆分,使用者可屏蔽内部实现。

对于一定时间区间内的所有请求,合并成一条请求处理。

@Override
public BuOrder getOrderById(Long orderId) {
    return getById(orderId);
}

举例说明,如果特定时间区间内汇集了相同的主键请求,那么合并后的请求查询一次数据库便能够响应所有的请求。

子类重写父类方法,可修改合并与拆分的行为。

@Override
protected RequstConfig createRequstConfig() {
    RequstConfig config = new RequstConfig();
    /* 单次最大合并请求数量 */
    config.setMaxRequestSize(100);
    /* 核心线程池大小 */
    config.setCorePoolSize(1);
    /* 请求间隔(毫秒) */
    config.setRequestInterval(200);
    return config;
}

(二)代码生成器

作者很懒,对于重复性代码连复制粘贴的欲望也没有,于是跨项目版的代码生成器应运而生。支持单表代码生成、多表连接代码生成。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-code-spring-boot-starter</artifactId>
    <version>1.5.5</version>
</dependency>

(三)分布式BitMap

支持编码和注解两种方式实现分布式BitMap

@BitMap(key = OrderServiceImpl.ORDER_BITMAP_KEY, value = "#orderId")
public BuOrder getOrder2(Integer orderId) {
    return getById(orderId);
}

添加如下依赖,通过注解的方式即可为项目引入分布式BitMap,无需关心实现细节便可大幅提高接口响应速度。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-bitmap</artifactId>
    <version>1.5.5</version>
</dependency>

(四)分布式限流

使用注解,基于IP或者用户的方式对接口限流,支持分布式系统。比如短信验证码接口,同一用户(IP)60秒内最多发送一次短信,通过分布式限流模块可大幅提高接口安全性。

为项目引入分布式限流模块非常简单,在控制器接口方法添加如下注解,便可实现分布式限流

@RateLimiter(ttl = 60,threshold = 1)

需要引入如下依赖

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-limiter</artifactId>
    <version>1.5.5</version>
</dependency>

(五)防重复提交

对于一些增加数据的场合,由于非幂等性的原因,网络不稳定容易产生脏数据,这时可使用防重复提交功能。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-repeat</artifactId>
    <version>1.5.5</version>
</dependency>

在一些场合,同一接口、同一参数避免脏数据入库,通常需要防重复提交。比如统计页面浏览量,超过3分钟浏览一次页面增加一次浏览量等。

在控制器方法接口添加如下注解

@RepeatSubmit(interval = 180)

(六)分布式日志收集

基于Redis pub/sub订阅特性实现的日志收集,用消息队列的方式收集日志,然后从另外系统消费日志(数据落库)。实现了跨系统日志收集复用。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-log</artifactId>
    <version>1.5.5</version>
</dependency>

在一些场合需要记录接口的操作日志信息,比如增加数据、修改数据、删除数据,需要用到日志系统

在控制器方法添加如下注解

@OperLog(title = "参数管理", businessType = BusinessType.INSERT)

(七)统计API接口响应时间

基于AOP的方式封装统计API接口响应时间,按需引入。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-take-time</artifactId>
    <version>1.5.5</version>
</dependency>

对于想统计接口的响应时间,添加上述依赖,并在控制器方法添加@TakeTime注解。

(八)多数据源模块

一些项目有多数据源的需求,比如将系统表与业务表分离等,这时有多数据源解决方案,能够显著提高编码效率,使开发者更加专注于业务开发。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-db-datasource</artifactId>
    <version>1.5.5</version>
</dependency>

引入上述依赖,你的项目便有魔法助力,快速拥有多数据源的能力。 使用相当简单:

(1)改造数据源配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/demo-master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    druid:
      slave:
        enabled: true
        url: jdbc:mysql://localhost:3306/demo-slave?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456

在业务层使用如下注解

// 对应第一个数据源,可作用于类和方法上
@Ds(value = DataSourceType.MASTER)

// 对应第二个数据源,可作用于类和方法上
@Ds(value = DataSourceType.SLAVE)

(九)定时任务

定时任务模块是对Quartz框架进一步封装,使用更加简洁。

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-quartz</artifactId>
    <version>1.5.5</version>
</dependency>

编写定时任务

@Component
@DisallowConcurrentExecution
@CronExp(id = 1, cron = "0/5 * * * * ?")
public class DemoJob implements Job {
    @Override
    public void execute(JobExecutionContext context) {
        System.out.println("任务1:"+LocalDateTime.now());
    }
}

使用上述代码便快速在Quartz生态完成一个定时任务。

五、使用UCode CMS

上述代码是UCode CMS的内部封装的源代码,不能对外直接使用,这里提供两种对外使用的方式。

(一)克隆初始化项目

1、克隆脚手架项目

克隆脚手架项目并导入idea中

https://gitee.com/decsa/demo-cms.git
2、使用SQL脚本初始化数据库

使用项目自带的SQL脚本初始化数据库

sql/
├── cms(必选).sql                                 // 核心脚本(必选)
3、配置数据库连接
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    # 主库数据源
    url: jdbc:mysql://localhost:3306/ucode-cms2
    username: root
    password: 123456
4、启动项目

启动项目前检查Mysql数据库服务和Redis服务配置信息是否正常。

http://localhost:8080

使用脚手架或者在脚手架上修改比较方便,原因是将细节内容提供在初始化项目中。

(二)从零新建项目

1、添加依赖
<dependencies>
    <!--Cms核心依赖(必选)-->
    <dependency>
        <groupId>xin.altitude.cms</groupId>
        <artifactId>ucode-cms-spring-boot-starter</artifactId>
        <version>1.5.5</version>
    </dependency>
</dependencies>
2、添加配置类

此配置类与Spring Security有关,属于权限管理范畴。

@Configuration
public class SecurityConfig extends AbstractSecurityConfig {
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        super.configure(httpSecurity);
    }
}
3、初始化数据库

初始化数据库与配置连接信息

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    # 主库数据源
    url: jdbc:mysql://localhost:3306/ucode-cms2
    username: root
    password: 123456
4、启动项目

启动项目前检查Mysql数据库服务和Redis服务配置信息是否正常。

http://localhost:8080

从零新建项目需要注意的细节部分略微多一些,也能够快速体验使用UCode CMS。

六、互相交流

如果在使用过程中有任何疑问,欢迎与我联系。

请添加VX号dream4s联系入群,谢谢。

Copyright (c) 2020-2022, Java知识图谱 (http://www.altitude.xin). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

UCode Cms 开源项目(既然来了,给个🌟吧♥️) 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ArrayEdu/ucode-cms-vue.git
git@gitee.com:ArrayEdu/ucode-cms-vue.git
ArrayEdu
ucode-cms-vue
Ucode-Cms-Vue
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891