# 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 #### 感谢