从零开始整SpringBoot-搭建一个企业级项目
创建Springboot项目
在企业里的项目多数是分Modules的,更多是通过物理方式隔离层之间的职责。
首先按照原有新建SpringBoot项目创建,填好相关信息后,选择Java 8其他不用选。




完成后得到上面的结构,把红色选中的相关模块删除后,得到下面的项目结构

新建Module

什么都不需要选,下一步

填好Name后(注意前缀统一,通过-进行分割)点击完成,得出以下结构。

重复上面步骤,把sikiro-system-infrastructure、sikiro-system-repository新增上去,得到下面结构

添加项目依赖
sikiro-om-api->sikiro-om-application->sikiro-om-repository,sikiro-om-infrastructure被三层直接依赖
一共有两种方式添加:
在File->Project Structure->Modules,点击右侧的+,选择Module。

另外一种在pom.xml添加dependencies

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>om</artifactId>
<groupId>sikiro.system</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>sikiro-system-api</artifactId> <dependencies>
<dependency>
<groupId>sikiro.system</groupId>
<artifactId>sikiro-system-application</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>sikiro.system</groupId>
<artifactId>sikiro-system-infrastructure</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
添加Package
在sikiro-system-api项目添加新package-com.sikiro.system.api,同时添加SikiroSystemApiApplication

@SpringBootApplication()
@ComponentScan(basePackages = {"com.sikiro.system"})
public class SikiroSystemApiApplication {
public static void main(String[] args) {
SpringApplication.run(SikiroSystemApiApplication.class, args);
}
}
然后继续添加HelloController到新的package-com.sikiro.system.api.controller
@RestController
public class HelloController {
@GetMapping("/api/hi")
public ApiResult Hi(){
return ApiResult.Success();
}
}
在sikiro-system-infrastructure添加下面两个类
package com.sikiro.system.infrastructure.base; import lombok.AccessLevel;
import lombok.Setter; /**
* API统一响应实体
* @param <T> 业务实体
*/
public class ApiResult<T> { @Setter(AccessLevel.PRIVATE)
public int resultCode; @Setter(AccessLevel.PRIVATE)
public T data; @Setter(AccessLevel.PRIVATE)
public String message; @Setter(AccessLevel.PRIVATE)
public boolean success; @Setter(AccessLevel.PRIVATE)
public boolean failed; @Setter(AccessLevel.PRIVATE)
public boolean error; public static <T> ApiResult<T> Success() {
return Success(ApiResultCode.Succeed.Message(), null, ApiResultCode.Succeed.Value());
} public static <T> ApiResult<T> Success(T data) {
return Success(ApiResultCode.Succeed.Message(), data, ApiResultCode.Succeed.Value());
} public static <T> ApiResult<T> Success(String msg) {
return Success(msg, null);
} public static <T> ApiResult<T> Success(String msg, T data, int code) {
ApiResult<T> result = new ApiResult<>();
result.setMessage(msg);
result.setData(data);
result.setResultCode(code);
result.setSuccess(true);
result.setFailed(false);
result.setError(false); return result;
} public static <T> ApiResult<T> Success(String msg, T data) {
return Success(msg, data, ApiResultCode.Succeed.Value());
} public static <T> ApiResult<T> Failed() {
return Failed(ApiResultCode.Failed.Message(), null, ApiResultCode.Failed.Value());
} public static <T> ApiResult<T> Failed(String msg) {
return Failed(msg, null);
} public static <T> ApiResult<T> Failed(String msg, T data) {
return Failed(msg, data, ApiResultCode.Failed.Value());
} public static <T> ApiResult<T> Failed(String msg, T data, int code) {
ApiResult<T> result = new ApiResult<>();
result.setMessage(msg);
result.setData(data);
result.setResultCode(code); result.setSuccess(false);
result.setFailed(true);
result.setError(false); return result;
} public static <T> ApiResult<T> Error(String msg) {
ApiResult<T> result = new ApiResult<>();
result.setMessage(msg);
result.setResultCode(ApiResultCode.Error.Value()); result.setSuccess(false);
result.setFailed(true);
result.setError(true); return result;
}
}
package com.sikiro.system.infrastructure.base;
public enum ApiResultCode {
Succeed(200,"请求成功"),
Failed(400,"请求失败"),
Error(500,"服务执行异常");
private int _index;
private String _msg;
ApiResultCode(int index, String msg) {
_index = index;
_msg = msg;
}
public int Value() {
return _index;
}
public String Message() {
return _msg;
}
}
最后编辑启动配置

从零开始整SpringBoot-搭建一个企业级项目的更多相关文章
- 一步步从零开始用 webpack 搭建一个大型项目
开篇 很多人都或多或少使用过 webpack,但是很少有人能够系统的学习 webpack 配置,遇到错误的时候就会一脸懵,不知道从哪查起?性能优化时也不知道能做什么,网上的优化教程是不是符合自己的项目 ...
- 从零开始使用vue-cli搭建一个vue项目及注意事项
一.安装node.js 1.根据电脑的自行下载node.js安装包http://nodejs.cn 2.点击安装,按照正常的的一路点击下去 3.验证安装是否成功,按键win+r,输入cmd打开命令行工 ...
- vue-用Vue-cli从零开始搭建一个Vue项目
Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对 ...
- 从零开始搭建一个react项目
Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...
- Vue.js学习笔记--菜鸟搭建一个企业级vue的项目
vue.js新手搭建一个企业项目,从0开始 前置条件: node.npm请先安装配置好 下面开始: npm 下载vue-cli脚手架工具 确认安装成功看到版本号: 初始化项目,选用webpack(p ...
- 从零开始用 Flask 搭建一个网站(一)
前言 笔者之前未接触过 Python,只是略懂一点前端,所以说从零开始也相差无几吧.Flask 是一个轻量级的基于 Python 的框架,但是扩展性非常良好(Github 上 22000 多个 sta ...
- 从零开始用 Flask 搭建一个网站(二)
从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构.我们要搭建的网站是管理第三方集成的控制台,类似于 Slack. 本篇主要讲解数据如何 ...
- 从零开始用 Flask 搭建一个网站(四)
前言 从零开始用 Flask 搭建一个网站(三) 介绍了网页前端与后端.前端与前端之间数据的交流.本节主要介绍一下如何应用 Flask-OAuthlib, 使用 Flask-OAuthlib 就可以轻 ...
- springboot搭建一个简单的websocket的实时推送应用
说一下实用springboot搭建一个简单的websocket 的实时推送应用 websocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 我们以前用的http协议只能单 ...
- 从零开始用 Flask 搭建一个网站(三)
从零开始用 Flask 搭建一个网站(二) 介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互.本节涉及到前端,因此也会讲解一下 jinja2 模板.jQuery.aja ...
随机推荐
- 多线程结合自定义logback日志实现简单的工单日志输出
前言 这周学习了logback自定义日志格式.多线程基础.以及常见的定时器,本篇博客主要是结合以上知识实现一个简单的定时全部工单输出任务,再通过自定义的日志打印输出到控制台. 1.logback自定义 ...
- PopupWindow点击空白区域消失
下面三个条件必须要有,要在popupWindow显示之前调用popupWindow.setOutsideTouchable(true);popupWindow.setFocusable(true);p ...
- Yii初学者必看-yii 表单验证规则
对yii深入了解总结出:希望对初学者有些帮助 Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术. 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 A ...
- 基于sanic和爬虫创建的代理ip池
搭建免费的代理ip池 需要解决的问题: 使用什么方式存储ip 文件存储 缺点: 打开文件修改文件操作较麻烦 mysql 缺点: 查询速度较慢 mongodb 缺点: 查询速度较慢. 没有查重功能 re ...
- 微信小程序隐藏页面滚动条
开发小程序时,经常会碰到页面长度超过屏幕高度,然后下拉时会出现滚动条,对于一些有强迫症的人来说是不可忍受的. 网上看了好多,写的.都评论有起作用或者不起作用的. 我在这分享一个全局隐藏滚动条的方式. ...
- 我的OpenAI库发布了!!!
chatGPT正式发布已经有段时间了,这段时间我也深度体验了chatGPT的魅力. OpenAI除了提供网页版的chatGPT,还通过api的形式提供了很多其它服务,包括文字纠错.图片生成.音频转换等 ...
- 笔记七:进程间的通信(IPC通信之信号灯)
信号量 定义信号变量: sem_t sem1 sem2 初始化信号量 P操作 V操作 功能 信号量(POSOX) 信号量灯(IPC) 定义信号变量 sem_t sem1 ...
- [人脸活体检测] 论文: Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision
Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision 论文简介 与人脸生理相关的rppG信号被研究者 ...
- 2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个正整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 输入:n = 20。 输出:19。
2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 . 给你一个正整数 n ,请你返回区间 [1, n] 之间特殊整数的数目. 输入:n = 20. 输出:19. ...
- 2022-09-25:给定一个二维数组matrix,数组中的每个元素代表一棵树的高度。 你可以选定连续的若干行组成防风带,防风带每一列的防风高度为这一列的最大值 防风带整体的防风高度为,所有列防风高度
2022-09-25:给定一个二维数组matrix,数组中的每个元素代表一棵树的高度. 你可以选定连续的若干行组成防风带,防风带每一列的防风高度为这一列的最大值 防风带整体的防风高度为,所有列防风高度 ...