开发通用模板设计

news2024/11/18 1:44:15

文章目录

  • 需求
  • 摘要
  • 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的。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis 的XML实现方法

MyBatis 的XML实现方法 MyBatis 的XML实现方法前情提示创建mapper接口添加配置创建xml文件操作数据库insert标签delete标签select标签resultMap标签 update标签sql标签,include标签 MyBatis 的XML实现方法 前情提示 关于mybatis的重要准备工作,请看MyBatis 的注解实现方法 创…

机器学习系列 16:使用 scikit-learn 的 Pipeline

在机器学习项目中,我们经常需要进行大量的数据预处理步骤,最后用处理干净的数据集来拟合机器学习算法得到一个合适的机器学习模型。 scikit-learn 提供了一个强大的 Pipeline 类来帮助我们将所有的数据预处理步骤和训练模型的步骤串起来。就像流水线一样…

【UE 材质】闪电材质

效果 步骤 1. 新建一个材质这里命名为“M_Lighting” 打开“M_Lighting”,设置混合模式为半透明,着色模型为无光照 在材质图表中添加如下节点 其中,纹理采样节点的纹理是一个线条 此时预览窗口中效果如文章开头所示。

LINUX基础培训十九之常见服务dns介绍

前言、本章学习目标 了解dns服务用途掌握dns服务器的配置掌握dns服务的使用 一、DNS服务概述 DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的个分布式数据库,能够使人更方便的访问…

计数排序(六)——计数排序及排序总结

目录 一.前言 二.归并小补充 三.计数排序 操作步骤: 代码部分: 四.稳定性的概念: 五.排序大总结: ​六.结语 一.前言 我们已经进入排序的尾篇了,本篇主要讲述计数排序以及汇总各类排序的特点。码字不易&#x…

Nuget包缓存存放位置迁移

一、背景 默认情况下,NuGet会将项目中使用的包缓存到C盘,随着项目开发积累nuget包越来越多,这会逐渐挤占大量C盘空间,所以我们可以将nuget包缓存位置指定到其他盘中存放。 二、软件环境 win10、vs2022 三、查看当前缓存存放位…

realsence 455 查看左右摄像头

前言 我打算使用realsence的左右连个摄像头去自己标定配准、然后计算距离的,就需要找s、下载包。 没成想,这个455的左右摄像头是红外的 步骤 安装sdk: Intel RealSense SDK 2.0 – Intel RealSense Depth and Tracking cameras 尽量在w…

为什么要用云手机养tiktok账号

在拓展海外电商市场的过程中,许多用户选择采用tiktok短视频平台引流的策略,以提升在电商平台上的流量,吸引更多消费者。而要进行tiktok引流,养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式&#xff0…

【新书推荐】3.2节 位运算之加减乘除

本节内容:二进制移位运算,以及逻辑运算与算术运算之间的转换。任何进制的位运算本质都是一样的。 ■二进制数移位运算:二进制数向左移位运算相当于做2的幂乘法运算,二进制数向右移位运算,相当于做2的幂除法运算。 ■十…

qt学习:Table widget控件

目录 头文件 实战 重新配置ui界面 添加头文件 在构造函数中添加初始化 显示方法 该实例是在sqlite项目上添加qt学习&#xff1a;QTSQL连接sqlite数据库增删改查-CSDN博客 头文件 #include <QTableWidgetItem> 实战 重新配置ui界面 用法介绍&#xff0c;可以双击…

大数据StarRocks(八):资源隔离实战

前言 自 2.2 版本起&#xff0c;StarRocks 支持资源组管理&#xff0c;集群可以通过设置资源组&#xff08;Resource Group&#xff09;的方式限制查询对资源的消耗&#xff0c;实现多租户之间的资源隔离与合理利用。在 2.3 版本中&#xff0c;StarRocks 支持限制大查询&#…

RK3568 Android 13 系统裁剪

android 13 系统裁剪是个大工程&#xff0c;裁剪也是需要大量的测试&#xff0c;才能保证系统的稳定性&#xff0c;以下是RK官方给出的裁剪方案&#xff0c;有兴趣的可以去看一下&#xff0c;对裁剪不是要求过高的可以根据官方的建议&#xff0c;对系统进行裁剪: Rockchip And…

ssh 配置

ssh 配置 在管理Git项目上&#xff0c;很多时候都是直接使用 https url 克隆到本地&#xff0c;当然也有有些人使用 SSH url 克隆到本地。 这两种方式的主要区别在于&#xff1a;使用 https url 克隆对初学者来说会比较方便&#xff0c;复制 https url 然后到 git Bash 里面直…

纯html+js+css个人博客

首页 <!DOCTYPE HTML> <html> <head> <title>博客</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" content"widthdevice-width, initial-sca…

E. Vlad and a Pair of Numbers(位运算)

思路&#xff1a;如果x在这一位是1&#xff0c;说明a,b在这一位一个是1一个是0&#xff0c;我们默认a为1&#xff0c;b为0.. 对于n的一些位为0&#xff0c;那么a&#xff0c;b在这一位肯定相同。我们想&#xff0c;如果a和b的和右移一位与x相同&#xff0c;所以1的位置是相同的…

按照模板生成文件,Word 或者 Excel

需求流程&#xff1a; 模板部分如图&#xff1a; Web端技术选用Jfinal 功能实现&#xff1a; 下面代码是调用 --“外部接口”--传参&#xff0c;将前端选中的信息传给后端&#xff0c; 另外将后端返回的文件流下载成文件 package ibasic.web.com.controller;import java.io.Bu…

链表--114. 二叉树展开为链表/medium 理解度C

114. 二叉树展开为链表 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而…

ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口;向量数据库的挑战和未来

&#x1f989; AI新闻 &#x1f680; ChatGPT更新了Mention功能&#xff0c;集结若干GPTs作战&#xff0c;AI智能体的心智入口 摘要&#xff1a;OpenAI在ChatGPT中引入了一个新功能&#xff0c;允许用户在聊天时任意一个GPTs&#xff08;即ChatGPT最新推出的AI Agent 智能应用…

Java 对部分接口返回数据进行加密,或其他处理

业务场景&#xff1a;后端项目中分为PC端和移动端接口&#xff0c;移动端为例如 mobile 开头的URl&#xff0c;需求为调用移动端接口时&#xff0c;对返回数据进行加密&#xff0c;PC端不加密 import cn.hutool.core.date.DatePattern; import cn.hutool.json.JSONConfig; impo…

HiveSQL题——排序函数(row_number/rank/dense_rank)

一、窗口函数的知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路&#xff1a; LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowin…