SOA微服务案例springboot+mybatis使用gradle构建案例

2023-11-02

SOA系统架构的体现之springboot+mybatis框架

题外话 :为什么要选用SOA架构
不同种类的操作系统,应用软件,系统软件和应用基础结构(application infrastructure)相互交织,这便是IT企业的现状。一些现存的应用程序被用来处理当前的业务流程(business processes),因此从头建立一个新的基础环境是不可能的。企业应该能对业务的变化做出快速的反应,利用对现有的应用程序和应用基础结构(application infrastructure)的投资来解决新的业务需求,为客户,商业伙伴以及供应商提供新的互动渠道,并呈现一个可以支持有机业务(organic business)的构架。SOA凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新服务或更新现有服务,以解决新的业务需要,提供选择从而可以通过不同的渠道提供服务,并可以把企业现有的或已有的应用作为服务, 从而保护了现有的IT基础建设投资。

下面进入主题:
本例是springboot+mybatis+gradle构建而成
如下图是工程的目录结构:

这里写图片描述

构建工程和其它springboot的工程构建流程一样,这里主要记录一下几个在实际工作过程中需要注意的地方。

  1. 工程属性的配置文件环境化
    顾名思义,一个正真的工程都是要进行不断的环境变化的,这就要求工程必须在很小的改动情况下适应不同的工作环境,简单点比如在开发环境,测试环境以及生产环境,这是比较通俗的环境定义,当然在不同的企业要求下可能有些不同。但不管怎么样,对于工程而言要都有高度适应性。springboot提供给我门极简化的工程配置application.properties,里面基本可以满足简单工程的所有配置。这是对于工程而言的,对于环境而言,springboot并没有从这层面来解决我们的问题,需要借助第三方工程管理工具来帮我们解决这个问题,比如maven,比如gradle,下面我们列举在gradle中是如何操作的。
    -1) 引入environment概念,操作而言,既在主目录下创建environment,并在里面定义环境目录,如图:这里写图片描述
    - 引入environment后需要我们的构建工具gradle进行配置,使得gradle构建工具去识别认识它,所以我们在build.gradle中添加可扩展变量ext.env = hasProperty(“env”) ? env : “dev”,如图:
    这里写图片描述
    至此,配置文件在可变环境下的配置就OK了,可以使用命令 gradle build war来感受一下打出来的包是否是相同的路径下了。
    -2) 记得在操作上面的步骤之前把本地包引入,不然之前的一切都白搭了,如图:
    这里写图片描述
    最后打包完的结果是:
    这里写图片描述
    这里写图片描述

  2. 工程的日志输出合理化
    springboot的配置文件可以帮我们解决日志配置的问题,但是如果不加热部署条件,日志格式就显得有点鸡肋,于是我们可以自定义日志格式,即在主目录下引入logback.xml配置文件,spring boot会自动扫描该文件并加载相关bean,如上图目录。日志文件也可以做到在不同的环境中有不同的配置,这个和上面的步骤一样。

  3. 工程目录结构的层次化
    工程目录的层次化是必须要做的事,没有清晰明了的层次结构,工程到最后会很乱,对代码的管理是极为不便的,甚至会影响到构造部署包时对相关目录操作的复杂化。所以我们要做到: 先层次化–>模块化–>结构化, 以此保证代码的管理的健壮性。
    在最后要强调一点,如果工程使用的是mybatis,切勿将sql脚本与Java代码以及Java文件目录糅合到一起,这样严重违背mybatis的初衷:高度可配置,高度可维护。

题外话,有一位前辈Java程序员一天问我,gradle熟吗?我说会用。他说:“你懂它的原理吗?”“这个真不懂”。对于我们大多数程序猿来说,它就是个工具,你无须去深究他的原理,能够熟练运用它即可。工程使用maven或者gradle构建都一样,初学者无须纠结该使用什么工具,哪个熟悉就用那个。等能够深刻理解工程构建思路时,可以尝试相互转化,融会贯通。
比如maven工程和gradle的相互转化,就很简单,你想知道吗?关注我,私信我都可以。我会在后面专门写一篇文章来讲述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SOA微服务案例springboot+mybatis使用gradle构建案例 的相关文章

随机推荐

  • 前后端数据交互

    前后端数据交互 前后端数据交互方式有三种 1 form表单 2 ajax 3 websocket form表单
  • 18年西工大硕士研究生入学考试复试机试解答

    Headline 18年瓜大机试解答 Author 周小枫 Email weijinxiong ncu outlook com Date 2019 1 4 Brief 这是一份菜鸡帮更菜的鸡写的参 考code 经测试 以下code都OK 如
  • priority_queue元素为指针时,重载运算符失效

    使用priority queue构造最大最小堆时 发现priority queue中元素为指针时 std greater std less函数并不能调用到自定义数据的重载运算符 排序结果是根据指针地址大小计算的 从而导致最大最小堆失效 in
  • 测试用例设计——边界值分析法

    在前面的测试用例设计 等价类划分法中 我们使用等价类划分法给两位数加法器设计了测试用例 但在测试过程中我们发现了一个问题 为什么我们用等价类法设计的测试用例没有发现这个问题呢 查看一下代码 发现程序员粗心 边界条件设置错误了 无数的测试实践
  • Mac升级go

    目录 升级流程 卸载 安装 升级流程 在Mac中对go版本的升级采用先卸载后安装的过程进行go版本升级 或者回退 卸载 在卸载前 先查看下当前的go版本 go version go version go1 14 5 darwin amd64
  • cgroup小结

    安装cgroup yum install libcgroup 配置cgroup config文件 vim etc cgconfig conf mount cpuset cgroup cpuset cpu cgroup cpu cpuacct
  • 【订单分批】基于萤火虫算法求解订单分批问题附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 一种基于群体智能优化算法的订单分批方法 包括如下步骤 1 建立以订单方案的总行走距离
  • DNS报文格式解析

    DNS分为查询请求和查询响应 请求和响应的报文结构基本相同 基础结构部分 报文首部 事物ID DNS报文的ID表示 对于请求报文和其对应的应答报文 该字段的值是相同的 通过它可以区分 DNS 应答报文是对哪个请求进行响应的 标志 DNS 报
  • Vue props传参获取失败解决方法

    文章目录 问题背景 解决方法 总结 问题背景 在父组件 通过ajax请求给controlManage赋值 再将值传到Test子组件 子组件在created mounted方法均获取不到数据
  • 使用R语言对指定列进行开根号并生成新的数据列

    使用R语言对指定列进行开根号并生成新的数据列 在R语言中 我们经常需要对数据进行各种数学运算和转换 其中一项常见的操作是对指定列进行开根号并生成新的数据列 本文将介绍如何使用R语言实现这个操作 假设我们有一个名为 data 的数据框 其中包
  • Sublime Text入门使用教程

    简介 说到最好用的编辑器 首推Sublime 感觉比notepad 胜出无数倍 支持 Windows 及 Mac 等多平台 类似于 Eclipse IDEA 有着丰富的插件系统 完全可以满足各种编辑 开发需求 强烈建议安装或者升级到最新版
  • boost解析xml C++

    cpp include
  • 【Xilinx Vivado时序分析/约束系列2】FPGA开发时序分析/约束-建立时间

    目录 基本概念 数据结束时间 Data finish time 保持时间门限 保持时间余量 Hold Slack 基本概念 数据结束时间 Data finish time 之前解释了数据达到的时间 对于data arrival time T
  • 理解矩阵(一)

    前不久chensh出于不可告人的目的 要充当老师 教别人线性代数 于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次 很明显 chensh觉得 要让自己在讲线性代数的时候不被那位强势的学生认为是神经病 还是比较难的事情 可怜的chens
  • 区间预测

    区间预测 MATLAB实现QRCNN LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测 目录 区间预测 MATLAB实现QRCNN LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测 效果一览 基本介绍 模型描述 程序设计 参
  • 线扫激光算法原理

    一 线扫激光算法原理 激光器发出的激光束经准直聚焦后垂直入射到物体表面上 表面的散射光由接收透镜成像于探测器的阵列上 光敏面于接收透镜的光轴垂直 如图 当被测物体表面移动x 反应到光敏面上像点位移为x a为接收透镜到物体的距离 物距 b为接
  • 《html学习笔记》列表与表单

    目录 1 列表 1 1列表分为三种 无序 有序 自定义 1 2 无序列表 1 3 有序列表 1 4 自定义列表 2 表单 2 1 表单域 2 2 表单控件 2 3 常用属性 2 4下拉列表 2 5标签 2 6文本域 1 列表 1 1列表分为
  • js两数之和

    两数之和 力扣 第一题 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 数组nums nums 2 7 11 15 target 值是 tar
  • WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制

    WebRTC音视频通话 新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务 可以查看 https blog csdn net gloryFlow article details 132257196 之前实现iOS端调用o
  • SOA微服务案例springboot+mybatis使用gradle构建案例

    SOA系统架构的体现之springboot mybatis框架 题外话 为什么要选用SOA架构 不同种类的操作系统 应用软件 系统软件和应用基础结构 application infrastructure 相互交织 这便是IT企业的现状 一些