开发通用模板设计

文章目录

  • 需求
  • 摘要
  • 1 模板描述
  • 2 模板内容介绍
    • 2.1 模块间依赖关系
    • 2.2 模板目前集成
      • 2.2.1 swagger+Knife4j
      • 2.2.1 nacos+SpringBoot+SpringCloudAlibaba
  • 3 项目地址
  • 4 FAQ

需求

目前在开发中,使用的非本人搭建的项目架子,存在如下问题:

  • 依赖无法统一管理。
  • 一个模块中,分层领域模型混杂。
    因而作者就重新搭建了一套架子,旨在解决依赖统一,分层领域模型等问题。

摘要

关键字:低耦合、nacos配置共享、 nacos配置中心、Maven依赖管理

1 模板描述

当前模板采用低耦合开发模式,主要关注与各业务主干。

  • 在common模块,建议主要集成配置文件等通用模板。
  • 在domain模块,建议主要集成实体类、VO、DTO等项目相关对象。
  • 在service模块,建议主要集成业务方法,诸如:controller、service、mapper层等。

2 模板内容介绍

2.1 模块间依赖关系

在这里插入图片描述

2.2 模板目前集成

2.2.1 swagger+Knife4j

halo-common/src/main/java/com/ruimind/config/SwaggerConfig.java

在如上所示路径下配置swagger相关描述信息,详细可参考路径下文件。

  • 问题一:你的swagger配置在另一个工程,为何会在其他工程中生效?
    • 回答:当前您在common模块中配置的swagger,已被依赖至所需服务,springboot的Application文件加载的时候,会默认扫描Application文件所在包下所有文件,因而会自动加载您的配置。
  • 问题二:为何有个必须token的设置?
    • 回答:因为在实际开发中,访问接口时通常需要用户信息校验,解决方法是携带用户token,因而此处会配置token值为swagger必填选项,假如您不需要token也无妨,在swagger上发送请求时,token随意填写集合,假如:1。

2.2.1 nacos+SpringBoot+SpringCloudAlibaba

  • SpringBoot+SpringCloudAlibaba : 为通用配置此处不再赘述

  • nacos:当前项目模板,引入nacos共享配置概念,具体实践描述如下:

    • 在nacos配置中心中,您可以将通用配置提取出成一个新的配置文件,这样做的好处:①解决了同样的配置被重复书写在不同项目的配置文件中;②便于配置的基础信息统一管理;③方便使用,在您使用时候只需要,在开发项目中引入共享配置即可。

    • 共享配置示例:

      nacos配置中心文件如下:

      a、共享配置

            # shared-spring-postgres.yml pg数据库共享配置
            spring:
              datasource:
                url: ${jdbc.url}
                username: ${jdbc.username}
                password: ${jdbc.password}
                type: com.alibaba.druid.pool.DruidDataSource
         b、您需要用共享配置的项目配置
    
            # YOUR-PROJECT.yml 您需要用共享配置的项目
            jdbc.url: jdbc:postgresql://${postgres-host:XXXXX
            jdbc.username: ${postgres-uname:XXX}
            jdbc.password: ${postgres-pwd:XXX}
    

    ​ 开发项目中引入共享配置,配置书写:

    a: bootstrap.yaml配置文件

            application:
              version: v1.0
            logging:
              config: classpath:logback-spring.xml
            spring:
              application:
                name: halo-test-service
              profiles:
                active: dev
              mvc:
                pathmatch:
                  #解决异常:swagger Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
                  #因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher
                  matching-strategy: ant_path_matcher
            rs:
              swagger:
                package-path: com.ruimind.controller
                title: XXX接口文档
                description: XXX业务。
                version: ${application.version}
    

    a: bootstrap.yaml配置文件

       
            # bootstrap-dev.yaml
            server:
              port: 18084
              tomcat:
                uri-encoding: UTF-8
                threads:
                  max: 1000
                  min-spare: 30
            spring:
              cloud:
                nacos:
                  server-addr:XXXX
                  discovery:
                    group: DEFAULT_GROUP
                    namespace: XXXX
                  config:
                    namespace: XXXX
                    prefix: ${spring.application.name}
                    file-extension: yaml
                    refresh-enabled: true
                    group: DEFAULT_GROUP
                    shared-configs:
                      - data-id: shared-spring-postgres.yml
                        group: SHARED_GROUP
                        refresh: false
                      - data-id: shared-spring-mybatis-plus.yml
                        group: SHARED_GROUP
                        refresh: false
                      - data-id: shared-spring-jpa.yml
                        group: SHARED_GROUP
                        refresh: false
    

3 项目地址

https://gitee.com/jiao-xin1314/halo

4 FAQ

  • 问题1:最外边那个大项目,Halo模块,是个啥问啥要那样设置?
    • 此处设计主要借鉴了,Maven依赖管理的思想,通过在父工程指定依赖版本号,确保各个子模块使用同一版本的依赖,避免版本冲突和不一致的问题。在您具体使用中,第一步:您应该首先在父工程(即外边那个最大的工程)的pom文件中指定依赖及其版本号,第二步:当需要在其他模块引用时,只需要引入G、A地址即可,无需制定版本号。
  • 问题2:拿到这个工程,我应如何使用?
    • 第一步:配置您的Git信息至当前项目。
    • 第二步:下载Maven依赖。
    • 第三步:修改配置文件中,nacos配置信息为您的信息,并剔除无用的共享配置。
    • ,第四步:测试启动,访问swagger:http://localhost:18084/doc.html,如出现Knife4j页面,项目初始化完成,开始你的开发吧。
  • 问题3:项目报错,xxApplication类找不到。
    • 首先,确保您的Maven配置无误。
    • 其次:执行Maven声明周期,依次clean、compile。
    • 最后:再启动,访问swagger:http://localhost:18084/doc.html,如出现Knife4j页面,项目初始化完成,开始你的开发吧。
  • 问题4:我应该执行哪个工程的项目周期?
    • 回答:执行带root的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/357792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速理解MoE模型

最近由于一些开源MoE模型的出现,带火了开源社区,为何?因为它开源了最有名气的GPT4的模型结构(OPEN AI),GPT4为何那么强大呢?看看MoE模型的你就知道了。 MoE模型结构: 图中&#xff0…

贪吃蛇游戏的实现

一.技术要点: 贪吃蛇需要掌握: c语言函数,枚举,结构体,动态内存管理,预处理指令,链表,Win32 API等 二.Win32 API 1.Win32 API简介 windows可以帮应用程序卡其视窗,描绘图案,使用周边设备,,Win32 API就是windows32位平台上的应用程序编程接口 2.控制台程序 (1).使用cmd命令…

如何在群晖中本地部署WPS Office并实现公网远程访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…

最优化基础 - (最优化问题分类、凸集)

系统学习最优化理论 什么是最优化问题? 决策问题: (1)决策变量 (2)目标函数(一个或多个) (3)一个可由可行策略组成的集合(等式约束或者不等式约束…

【RT-DETR改进涨点】ResNet18、34、50、101等多个版本移植到ultralytics仓库(RT-DETR官方一比一移植)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文是本专栏的第一篇改进,我将RT-DETR官方版本中的ResNet18、ResNet34、ResNet50、ResNet101移植到ultralytics仓库,网上很多改进机制是将基础版本的也就是2015年发布的ResNet移植到ultralytics仓库中,但是其实…

2024.1.29 GNSS 学习笔记

1.假设只对4颗卫星进行观测定位,卫星的截止高度角是15,那么如何布设这四颗卫星的位置,使其围成的四面体的体积得到最大,以获得最好定位精度? 答:3颗卫星均匀分布在最低仰角面上,第4颗卫星在测站…

live2D学习:表情的制作和给角色添加动作

表情的制作和给角色添加动作https://www.bilibili.com/video/BV1JE411Y7Te?p3&vd_source124076d7d88eee393a1d8bf6fc787efa 先把眼睛以外的部件进行锁定,可以长按鼠标左键,然进行框选左边的锁的部分,快速进行操作。 锁定的部件就没有办…

力扣712. 两个字符串的最小ASCII删除和

动态规划 思路: 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和;dp[i][j] 可以由: 如果 s1 的第 i 个字符(s1[i - 1])和 s2 的第 j 个字符(s2[j - 1])不相等&#xf…

这么复杂的刻度标签怎么绘制?超简单~~

今天我们开始「粉丝要求绘图系列」的第一篇推文 ,这个系列我会筛选出需求较多的一类图进行绘制讲解,当然,绘图的数据我们尽可能的全部分享出来(即使涉及一些论文数据,我们也会根据情况进行虚构处理的),本期的推文重要涉…

如何让wordpress首页只显示某一篇文章全部内容?在您的主页显示选择

大多数WordPress站点首页默认都是显示最新发布的文章列表,不过有些站点比较特殊,只想显示某一篇文章的全部内容,那么应该怎么设置呢? 其实,WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…

Java规则引擎:实现高效SQL变量数据处理的关键

SQL变量加工 SQL加工背景,在决策配置过程中,一些复杂的逻辑或模型可通过自定义SQL脚本编写创建数据变量,通过SQL脚本可以便捷的从数据库中取数,并且自定义SQL支持传参,可满足更复杂多变的数据加工处理。 注意&#x…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树

文章目录 第5章 决策树5.1 决策树模型与学习5.1.1 决策树模型5.1.2 决策树与if-then规则5.1.3 决策树与条件概率分布5.1.4 决策树学习5.2 特征选择5.2.1 特征选择问题5.2.2 信息增益5.2.3 信息增益比5.3.1 ID3算法5.3.2 C4.5的生成算法5.4 决策树的剪枝5.5 CART算法5.5.1 CART生…

步进伺服控制芯片TMC4361

TMC4361A 数据手册 步进电机运动控制器,支持 S 型斜坡和 sixPoint 六点式斜坡,进行了高速优化,支持动态修改运动参数。TMC4361A 包含 SPI 接口、Step/Dir 接口及闭环所需的编码器接口。 特征  简单易用的与微处理器通讯的 SPI 接口。  与…

操作系统基础:处理机调度【上】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 1 处理机调度(上)1.1 基本概念1.1.1 总览1.1.2 什么是调度1.1.3 调度的三个层次1.1.4 七状态模型1.1.5 三层调度的联系与对比1.1.6 总结 1.2 方式与…

编写交互式 Shell 脚本

在日常的系统管理和自动化任务中,使用 Shell 脚本可以为我们节省大量时间和精力。 文章将以输入 IP 为例,通过几个版本逐步完善一个案例。 原始需求 编写一个交互式的 Shell 脚本,运行时让用户可以输入IP地址,并且脚本会将输入…

linux批量查询python进程,批量关闭

我使用bash脚本启动了一个多进程的python代码,但是由于遗忘的问题,查看队列发现进程还在,但是我并不是使用linux的screen后台启动的,启动的进程丢失了,找不到启动这个的主进程了。我想能不能通过查询python启动命令&am…

HBuilderX插件

HBuilderX>工具插件安装 安装新插件 前往插件市场安装 1.DCloud插件市场 https://ext.dcloud.net.cn/ 2.GitHub官网 插件项目(下载zip) 本地离线包 离线安装插件 https://hx.dcloud.net.cn/Tutorial/OfflineInstall open /Applications/HBuilderX.app/Contents/HBuilderX/p…

【Linux】—— 信号的产生

本期,我们今天要将的是信号的第二个知识,即信号的产生。 目录 (一)通过终端按键产生信号 (二)调用系统函数向进程发信号 (三)由软件条件产生信号 (四)硬件…

硬件知识(2) 手机的传感器-sensor

#灵感# 看看小米在干啥 手机型号:Redmi Note 13 Pro,解读一下它宣传的手机卖点。 目录 宣传1:1/1.4" 大底,f/1.65 大光圈, 宣传2:支持 2 亿像素超清直出,分辨率高达 16320 x 12240 宣…

SeaTunnel Web安装 一把成

安装相关jar包,以及SeaTunnel 和Web 打成的包,可以直接使用,但是需要安装MySQL客户端的分享: 链接:https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码:0kmf 1. 环境准备 环境名称版本系统环境C…