# dframe
**Repository Path**: dody/dframe
## Basic Information
- **Project Name**: dframe
- **Description**: 集成一些优秀开源开发框架,做为快速开发基础框架
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2024-07-15
- **Last Updated**: 2025-12-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dframe
#### 介绍
集成一些优秀开源开发框架,做为快速开发基础框架
密码加密码使用sha256
#### 软件架构
软件采用了
sa-token 做安全认证单点登录
nacos 做为配置服务中心
magic-api做快速接口开发
apisix作为API网关
#### 安装教程
建议使用docker-compose 安装环境
1. 数据库mysql 用于 nacos 存储 及 应用使用
2. nacos 作为配置服务中心使用
3. apisix做为API网关
#### 使用说明
1. 引用可以通过
```xml
site.edody.dframe
dframe-spring-boot-starter
pom
${dframe.version}
site.edody.dframe
dframe-comm-spring-boot-starter
${dframe.version}
```
2. 如果需要SSO Server端可以引入
```xml
site.edody.dframe
dframe-ssoserver-spring-boot-starter
${dframe.version}
```
3. 如果需要使用admin功能可以引入
```xml
site.edody.dframe
dframe-admin-spring-boot-starter
${dframe.version}
```
4. 使用websocket 需要收入模块。
```xml
site.edody.dframe
dframe-admin-spring-boot-starter
${dframe.version}
```
可以在配置文件中设置服务名,端口号和监听类 dframe.websocket.listener={你的监听类名}
监听类实现WebSocketListener接口;
如:
``` yaml
dframe:
websocket:
servers:
# 服务名称,支持多个服务监听不同端口和监听处理类
datiqi:
port: 9012
listener: site.edody.dframe.DefaultWebSocketListener
```
```java
public class SelfListener implements DFrameWebSocketListener{
private static final Logger log = LoggerFactory.getLogger(DFrameDefaultWebSocketListener.class);
@Override
public void onOpen(String serverName, WebSocket conn, ClientHandshake handshake) {
log.info("[DFrame-{}] Default listener - Client connected", serverName);
conn.send("Welcome to DFrame WebSocket Server!");
}
@Override
public void onClose(String serverName, WebSocket conn, int code, String reason, boolean remote) {
log.info("[DFrame-{}] Default listener - Client disconnected: {}", serverName, reason);
}
@Override
public void onMessage(String serverName, WebSocket conn, String message) {
log.info("[DFrame-{}] Default listener - Received message: {}", serverName, message);
// 默认回声处理
conn.send("DFrame Echo: " + message);
}
@Override
public void onError(String serverName, WebSocket conn, Exception ex) {
log.error("[DFrame-{}] Default listener - WebSocket error", serverName, ex);
}
}
```
6. 配置示例
``` yaml
server:
port: 9082
compression:
enabled: true
min-response-size: 128
spring:
profiles:
active: dev
mvc:
path match:
matching-strategy: ant_path_matcher
servlet:
multipart:
max-file-size: 200MB
max-request-size: 200MB
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# # 配置Redis
data:
redis:
host: localhost
port: 6379
database: 4
password: "xxx"
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/dframe?useSSL=false&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: xxxx
password: xxxx
druid:
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 1000
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall
use-global-data-source-stat: true
# 配置监控服务器
stat-view-servlet:
enabled: true
login-username: admin
login-password: 123456
reset-enable: false
url-pattern: /druid/*
# 添加IP白名单
allow: ""
# 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
#deny:
web-stat-filter:
# 添加过滤规则
url-pattern: /*
# 忽略过滤格式
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
magic-api:
web: /extapi/web
show-sql: true #配置打印SQL
sql-column-case: camel
resource:
# location: data/magic-api
type: database # 配置存储在数据库中
tableName: api_file # 数据库中的表名
readonly: false # 是否是只读模式
backup: #备份相关配置
enable: true #是否启用
max-history: -1 #备份保留天数,-1为永久保留
table-name: api_backup_record #使用数据库存储备份时的表名
page:
page: current
size: size
cache:
enable: true #开启缓存,默认是不开启的
ttl: 3600000 #有效期1小时,默认-1 即永不过期
response-code:
success: 200 #执行成功的code值
invalid: 400 #参数验证未通过的code值
exception: 500 #执行出现异常的code值
crud: # CRUD相关配置
logic-delete-column: is_del #逻辑删除列
logic-delete-value: 1 #逻辑删除值
# security:
# username: admin
# password: 123456
editor-config: classpath:./magic-editor-config.js #编辑器配置
# Sa-Token配置
sa-token:
# token名称 (同时也是cookie名称)
token-name: token
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
active-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: uuid
# 是否输出操作日志
is-log: false
###自己本身同时启动一个单点登录中心
sso-server:
# Ticket有效期 (单位: 秒),默认五分钟
ticket-timeout: 300
# 所有允许的授权回调地址,
# allow-url: "*"
# 是否打开模式三
is-http: true
sign:
# API 接口调用秘钥
secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrszcb
forest:
# 关闭 forest 请求日志打印
log-enabled: false
dframe:
oss:
enable: true
endpoint: "https://oss-cn-guangzhou.aliyuncs.com"
accessKeyId: "xxxxx"
accessKeySecret: "xxxxx"
bucket: "xxxx"
# 统一登录页面
sso:
login: http://localhost:5173/#/login
# 上传路径
upload:
dir: /uploadfile
# websocket 配置
websocket:
servers:
datiqi:
port: 9012
listener: site.edody.dframe.DefaultWebSocketListener
# MQ配置
rocketmq:
name-server: 193.10.14.55:9876
producers:
exam-producer:
group: exam_producer_group
topics: [ EXAM_CREATE, EXAM_UPDATE ]
consumers:
exam--consumer:
group: exam_consumer_group
topic: EXAM_CREATE
tags: [ "SUBMIT", "TAG_B" ]
```
7. 数据库初始化
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 感谢