在开始学习了解BEECLOUD前,先来了解一下传统的开发模式与BEECLOUD的开发模式有什么不一样。
需要开发人员从接口到业务,再到数据持久化全流程开发,对开发人员技术要求相对比较高,同时引发的问题也比较多。比如 Java 用 SpringBoot,Mybatis 来开发一般来说就像下面这个流程:
普通业务,只需要开发人员会建数据,会建数据库表,建完数据库后框架自动提供对就表的数据接口,BEECLOUD开发就像下面这个流程(你没看错,就这么简单):
当然会有一些特殊情况需要处理,如开发人员需要在业务处理的过程中对请求参数进行校验,对业务处理结果进行再处理或在结果中增加其他数据集等,那就需要有java基础的开发工程师写少量简单的java代码了,如下流程(你没看错,还是这么简单):
beecloud是一套用于构建多数据源数据库管理后台快速开发框架,自动生成API接口,同时提供可视化API测试工具。能为中小型产品或项目提高开发效率的同时,降低人工成本50%左右,缩短开发周期50%左右。基于springboot,实现数据库表自动映射为restful接口,常用的增加、删除、修改、查询与多条件查询功能自动实现,大大减少开发工作量,同时,beecloud框架自动实现多数据源中的统一事务,即使是应届毕业生或初学者也能快速开发大型系统,不仅易于上手,还便于与第三方库或既有项目整合。
如果你想在深入学习 beecloud之前对它有更多了解,请通过邮件联系我:529822722@qq.com。
如果你已经是有springboot方面的开发经验,对于了解beecloud就更容易了,同时欢迎您加入beecloud开发团队。
可视化API测试页面
服务启动后系统自动提供api测试页面,测试地址为:http://host:port/{content_path}/$api,示例如下图:
假设你已了解关于springboot、redis 和 elasticsearch的相关知识。对学习beecloud框架的使用经验会有帮助,但这不是必需的。
引入maven包:
<dependency>
<groupId>cn.bee-cloud</groupId>
<artifactId>beecloud-service-springboot</artifactId>
<version>laster</version>
</dependency>
尝试基于beecloud创建一个应用项目,如果你使用过springboot与maven项目,那么你只需要几分钟的时候就可以创建一个开发项目,同时提供对外数据服务接口。
package bee.cloud.service.web;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;
import bee.cloud.service.BeeApplication;
@SpringBootApplication
@Component
public class BeewebApplication
{
public static void main(String[] args)
{
// System.setProperty("nacos.standalone", "true");
BeeApplication.run(args);
System.out.println("System inited.");
}
}
server.servlet.context-path=/webapi
# 服务端口
server.port=8233
# session最大超时时间(分钟),默认为30
server.session-timeout=60
# tomcat最大线程数,默认为200
server.tomcat.max-threads=200
server.tomcat.maxThreads=200
server.tomcat.accept-count=200
server.tomcat.acceptCount=200
# tomcat的URI编码
server.tomcat.uri-encoding=UTF-8
# Nacos 注册中心
#spring.application.name = nacos-discovery-server-local
#spring.cloud.nacos.discovery.server-addr = ***.***.***.***:8848
#spring.cloud.nacos.discovery.ip=192.168.31.16
#spring.cloud.nacos.discovery.port=8081
##日志配置
logging.path=/logs/
logging.file=server1.%d.log
logging.level.root=INFO
logging.level.com.jackie.springbootdemo.config=WARN
#logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level - %msg%n
#logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level - %msg%n
bootstrap.yml
server:
# session最大超时时间(分钟),默认为30
session-timeout: 60
#servlet:
# context-path: /page
tomcat:
uri-encoding: utf-8
# tomcat最大线程数,默认为200
max-threads: 200
maxThreads: 200
accept-count: 200
acceptCount: 200
port: 8282
spring:
application:
name: page
#name: nacos-discovery-server-local
profiles:
active: dev
#多个javaBean以最后一个为准
main:
allow-bean-definition-overriding: true
logging:
level:
root: info
#项目配置
project:
init:
db:
name: dbconfig-manager.yml
cache-item:
enable: true
urls:
- page/dict
- page/dict/item
#- page/area
dict:
enable: true
#初始化api配置
api:
#是否开启api初始化
enable: true
#初始化api配置文件名称
file-name: manager_api_config.yml
支持多数据源,分库等配置:
spring:
datasources:
initialSize: 1
minIdle: 1
maxActive: 5
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
connectProperties: remarks=true;useInformationSchema=true
options: useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&userSSL=false&useOldAliasMetadataBehavior=true
host: ip地址:3306
#host: 127.0.0.1:3306
db1:
url: jdbc:mysql://{host}/cookie?{options}
username: root
password: '*8849AE30E404D869783DDD09E00AD2B9*'
#需要初始化的表,%表示匹配t_开头的所有表
init_table: t_%
db2:
url: jdbc:mysql://{host}/cookie?{options}
username: root
password: '*8849AE30E404D869783DDD09E00AD2B9*'
#需要初始化的表,%表示匹配t_开头的所有表
init_table: t_%
redis缓存配置,支持集群配置,缓存分组等操作:
#======系统保留缓存======= #值为“*十六进制内容*”是表示加密串(后台加密工具生成),后台会自动解密 host=*B81595E2047DFDA736373DE5AB5B4AA8C5FA9390018D2BAE* #密码 password=*37FE174349ADEB13* #主机,IP+端口 #host=192.168.1.25:6390 #redis中的数据结构为Hash列表 #key:{group}:分组名称 #field:{host,timeout,maxActive,maxIdle,maxWait} #分组路由 #group=cache_route #======分组====== [kaoqin] #主机,IP+端口,如果多个主机请用逗号隔开; #如果存在多个主机时,第一个主机为主服务器负责写数据,其他主机都为从服务器,只负责读操作 #host=127.0.0.1:6379,127.0.0.1:6380 host=192.168.1.143:6379,192.168.1.143:6381 #连接超时限制,单位:毫秒,默认为5秒 timeout=5000 #最大活动连接数,默认为3000 maxActive=3000 #最大懒连接数,默认为最大活动连接数 maxIdle=3000 #最长等待时间,单位:毫秒,默认为5秒 maxWait=5000 [login] #host=127.0.0.1:6379 host=*B81595E2047DFDA736373DE5AB5B4AA8C5FA9390018D2BAE* #密码 password=*37FE174349ADEB13* #连接超时限制,单位:毫秒,默认为5秒 timeout=5000 #最大活动连接数,默认为3000 maxActive=10 #最大懒连接数,默认为最大活动连接数 maxIdle=10 #最长等待时间,单位:毫秒,默认为5秒 maxWait=5000 #资源回收时间,单位:毫秒,默认为0毫秒,为0时表示即时回收 recoveryTime=5000 #数据库索引(0-15) index=1 #数据字典缓存 [dictionary] #host=127.0.0.1:6379 host=*B81595E2047DFDA736373DE5AB5B4AA8C5FA9390018D2BAE* #密码 password=*37FE174349ADEB13* #连接超时限制,单位:毫秒,默认为5秒 timeout=5000 #最大活动连接数,默认为3000 maxActive=10 #最大懒连接数,默认为最大活动连接数 maxIdle=10 #最长等待时间,单位:毫秒,默认为5秒 maxWait=5000 #数据库索引(0-15) index=3 #系统配置 [system] #host=127.0.0.1:6379 host=*B81595E2047DFDA736373DE5AB5B4AA8C5FA9390018D2BAE* #密码 password=*37FE174349ADEB13* #连接超时限制,单位:毫秒,默认为5秒 timeout=5000 #最大活动连接数,默认为3000 maxActive=100 #最大懒连接数,默认为最大活动连接数 maxIdle=100 #最长等待时间,单位:毫秒,默认为5秒 maxWait=5000 #数据库索引(0-15) index=4 #业务缓存分组 [business] #与system分组同库,只有index不一致 link=system #数据库索引(0-15) index=5
公共配置,全局配置,通过BConfig类来读取值:
es: nipplat: # 阿里云 - endpoints: ip:9200 username: elastic password: elastic#123 # 虚拟机 - endpoints: ip:9200 username: elastic password: elastic#123 #缓存相关通用配置 cache: #空闲时间,单位:秒,默认为10秒 idle_time: 200 #系统配置 system: #系统运行状态,dev:开发状态,release:发布状态,默认为release active: dev #输出相关配置 out: #日期类型输出格式,默认为时间戳,(yyyy-MM-dd HH:mm:ss.SSS) #dateformat: yyyy-MM-dd HH:mm:ss #加密主键,默认为true,加密输出 encrypt_pk: true #不需要加密输出的PK名称,encrypt_pk为true时生效 no_encrypt_pk: - '*area_id' - province_id #是否输出这空属性 null_property: false
#文件上传配置,根据文件主传实现方式确定,可以是minio、fastNFS等 upload: #文件存放根目录 #root: /opt/web/cookie/file web-root: E:/workspace/webroot #大小限制 max-size: 2M #上传图片配置 img: #大小限制 max-size: 2M #预览图 preview: #小图大小 small: 200*300 #中图大小 middle: 600*800 #大图大小 #big: 1024*1600
合并到公共配置中:
#文件上传配置,根据文件主传实现方式确定,可以是minio、fastNFS等
upload:
#文件存放根目录
#root: /opt/web/cookie/file
web-root: E:/workspace/webroot
#大小限制
max-size: 2M
#上传图片配置
img:
#大小限制
max-size: 2M
#预览图
preview:
#小图大小
small: 200*300
#中图大小
middle: 600*800
#大图大小
#big: 1024*1600
合并到公共配置中,可独立配置:
es:
nipplat:
# 阿里云
- endpoints: ip:9200
username: elastic
password: elastic#123
# 虚拟机
- endpoints: ip:9200
username: elastic
password: elastic#123
对输出的API接口属性进行配置,将数据库表中的表名、字段名等增加注解,增加前端的可读性,同时可配置数据的脱敏规则,关联数据等。
#数据源名称,与dbconfig中对应 db1: #数据字典分组表 s_dict: #保存到login缓存分组中 cache: login #数据字典详情表 s_dict_item: #保存到login缓存分组中 cache: login #数据库用户表名 t_user: #显示标题 title: 用户管理 #表说明 describe: 用户管理 #缓存配置,如果配置缓存或搜索引擎后,数据库表的操作事务失效,因为写完表后马上就要同步到缓存或搜索引擎,与search互斥 #cache: 缓存分组名称 #ES搜索引擎配置,当cache正在时,search无效 #search: ES对应的配置名称 search: es:0 #逻辑删除标志 #logic_delete: 字段名=代表删除的值 #数据库表字段配置 fields: sex: #字段名称 #默认值 #defval: uuid #显示标题 title: 性别 #对应数据字典代码,如:$gender表示为性别字典,$为数据字典专用符号 dict: $gender #字段说明 describe: 性别 #脱敏方式,只对列表数据生效 #1、n*m:表示保留前n与后m位,中间用*号代替,如果长度不足n+1的,后边的m忽略不计,如:4*3表示为保留前4位与后3位,中间部分用*号替换 #2、*n:表示为后边的n位用*号代替,如:-6*表示为后边6位用*号代替 #3、n*:表示为前边的n位用*号代替,如:6*-表示为前边6位用*号代替 #4、a:b:表示为把字母a替换为字母b,ab字母随便指定,a可以是一个正则表达式,如:@|\\$\\&:#,表示将字符串是的字符(@、$、&)替换为“#” #tuomin: 4*3 #relation: 关联表,表对应的URI名[->别名]没有别名的话默认为表对应的UUI名 type: title: 类型 #字段对应的数据字典 dict: $stuffType status: title: 状态 #字段对应的数据字典 dict: $status userlevel: title: 等级 dict: $roleLevel c_user_info: fields: user_id: title: 用户ID relation: - db2:dg_msg_queue->queue name: tuomin: 1*1 idcard_no: tuomin: 4*3 phone: tuomin: 3*4 address: tuomin: 6* birth_date: tuomin: -:/ t_area: fields: area_level: dict: $rangeLevel #公告管理 t_notice: title: 公告管理 fields: notice_title: title: 标题 notice_type: title: 所属系统 relation: system notice_content: title: 内容 organ_id: title: 机构ID defval: '@organid' organ_name: title: 机构名称 defval: '@organ_name' issuer_name: title: 发布人 defval: '@realname' issuer_id: title: 发布人ID defval: '@user_id' issue_time: title: 发布时间 defval: time:yyyy-MM-dd HH:mm:ss last_update_time: title: 更新时间 defval: now:yyyy-MM-dd HH:mm:ss is_must_read: title: 是否强提醒 describe: 1-是,0-否 area_id: title: 区域ID defval: '@area_id' user_test: logic_delete: is_del=1 cache: business db2: dg_msg_queue: fields: name: tuomin: 1*1 idcard_no: tuomin: 4*3
==========================