前言介绍和环境搭建

简述

springboot 本身是为了做服务化用的,我们为什么要反其道使用它来开发一份单体web应用呢?

在我们现实的开发工作中,还有大量的业务系统使用的是单体应用,特别是对于中小型团队来说,在项目开发之初选择服务化开发是得不偿失的,因为对于此类团队,势必所有的工作都是需要我们开发人员来做的,例如:

  • 技术选型
  • 业务需求分析
  • 业务需求设计
  • 大量的测试
  • 运行部署
  • 运营健康监控
  • ...

小团队或小公司如果开发人员把大规模的精力放在除业务之外的工作中,那么我们的开发效率势必会特别低下,等我们系统开发一个版本出来,也许此类需求已经不是那么符合当前的发展了,此类团队追求的是短平快并且方便部署更新。有人就会问,那我们又为什么不选择SpringMVC呢? 当然如果团队中本身已经有成型的一套SpringMVC的框架可以拿来即用,当然也是完全ok的,但是所有使用过Springboot的同学都知道。

  1. Springboot帮我们把以前在SpringMVC中需要使用XML来配置的configuration内置化了,开发人员完全可以把大量精力放在业务钻研优化上面而不需要关注它是如何配置的。
  2. 作为技术选型来说,一定要想到我们的业务也许会高速扩张,在后期我们得能快速更新技术体系或者升级系统,那么springboot的本能服务化就可以体现出来了。
  3. 很多的新同学在学习springboot的时候,太多的资料本身是一种demo的学习,是需要大家进一步研究之后学以致用,不太贴近生产,我希望通过此次开发,可以直接开发一套可以生产使用的demo系统。

业务分析

在开发任何一个系统的时候,我们要实现的是一套电商平台,那么我们首先要考虑一个基本的电商平台都包含哪些业务功能?



上图展示了要实现一个电商最简单的模块信息。

技术选型

在技术选型的时候,个人建议遵循几点原则:

  1. 切合业务实际需要(任何脱离了业务的技术都是废柴)
  2. 团队人员能力(要符合团队成员的实际情况,否则上手会很慢)
  3. 技术社区活跃度(选择高活跃的技术对于后期排错相当重要,更为重要的是大部分错误已经被别人试过了...)
  4. 安全性(必不可少的选择)
  5. 可参考 Poc之后,我选择放弃OSGI

我们主题很明确的表明了要使用springboot 来实现一个web 项目,那么抓住这两个关键的点。

既然使用Springboot, 我们这里使用最新的版本2.2.0.RELEASE, 既然是web项目,那么必然要使用到web相关的技术,tomcat(springboot内置),并且我们采取前后端分离的技术来开发,后端提供restful 的api, 前端使用jquery & vuejs, 既然是一个真实项目,数据库当然也是我们必不可少的,我们使用MYSQL 8.0+,那么我们java要和db进行交互,我们使用mybatis作为bridge. 基本的技术已经足够我们使用了,那么具体依赖的package 后续会给大家一一介绍.

  • SpringBoot 2.2.0.RELEASE
  • Mysql 8.0.18
  • Mybatis 3.4.6

开发工具

工预善其事必先利其器, 以下是个人工具选择,仅供参考:

  • IntelliJ IDEA (code tools)

    • Free Mybatis Plugin (帮助我们方法和SQL跳转)
    • Lombok (使用注解节省太多的codes,提升效率)
    • Maven Helper(帮助依赖分析)
    • Restful Toolkit(可以实现和postman一样的简单效果,同时还能帮助我们生成一部分测试信息)
    • ...其他插件就人各有志啦~
  • Mysql Workbench(Mysql tools)
  • PDman (数据库设计工具,脚本的版本控制很好用哦)

Talk is cheap, show me the codes

说的再多,都不如来点实在的,那么我们接下来开始我们的表演吧.

创建单体项目结构

首先我们需要创建一个Maven的parent module, 用来将我们所有的模块信息都放在一起,如service,controller 等等.

Create Parent Module expensive-shop

  • 打开IDEA,选择File => New => Project

  • 点击Next,分别输入GroupId & artifactId

  • 点击Next,修改project name(不改也没有关系)

  • 点击Finish

此时,会生成srcpom.xml, 因为该项目为父类项目,不会有code实现,因此,删除src目录,并修改pom.xml 文件.

<?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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.life-runner</groupId>
<artifactId>expensive-shop</artifactId>
<version>1.0-SNAPSHOT</version> <name>expensive-shop</name>
<description>develop a on-line shop</description> <packaging>pom</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring默认使用yml中的配置,有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--监控端点依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
</project>

主要关注2点:

1.修改packaging 为pom, 表明是一个父类集合

2.引入parent节点为我们的springboot,这里是设置整个project的springboot 相关依赖以及版本管控

从上述中,在该节点设置version 为 2.2.0.RELEASE之后, 下面所有的grouporg.springframework.boot的依赖项都没有显示的设置版本信息.

Create child module

和创建父类项目一样的创建过程,依次创建我们需要用到的child modules, 完成后如下图:

经过上述环节,相信大家已经可以创建出我们项目所需要的架构环境了,下一次我们将开始实际业务的编码实现.

gogogo.

[springboot 开发单体web shop] 1. 前言介绍和环境搭建的更多相关文章

  1. [springboot 开发单体web shop] 6. 商品分类和轮播广告展示

    商品分类&轮播广告 因最近又被困在了OSGI技术POC,更新进度有点慢,希望大家不要怪罪哦. 上节 我们实现了登录之后前端的展示,如: 接着,我们来实现左侧分类栏目的功能. ## 商品分类|P ...

  2. [springboot 开发单体web shop] 2. Mybatis Generator 生成common mapper

    Mybatis Generator tool 在我们开启一个新项目的研发后,通常要编写很多的entity/pojo/dto/mapper/dao..., 大多研发兄弟们都会抱怨,为什么我要重复写CRU ...

  3. [springboot 开发单体web shop] 4. Swagger生成Javadoc

    Swagger生成JavaDoc 在日常的工作中,特别是现在前后端分离模式之下,接口的提供造成了我们前后端开发人员的沟通 成本大量提升,因为沟通不到位,不及时而造成的[撕币]事件都成了日常工作.特别是 ...

  4. [springboot 开发单体web shop] 5. 用户登录及首页展示

    用户登录及前端展示 用户登录 在之前的文章中我们实现了用户注册和验证功能,接下来我们继续实现它的登录,以及登录成功之后要在页面上显示的信息. 接下来,我们来编写代码. 实现service 在com.l ...

  5. [springboot 开发单体web shop] 7. 多种形式提供商品列表

    上文回顾 上节 我们实现了仿jd的轮播广告以及商品分类的功能,并且讲解了不同的注入方式,本节我们将继续实现我们的电商主业务,商品信息的展示. 需求分析 首先,在我们开始本节编码之前,我们先来分析一下都 ...

  6. [springboot 开发单体web shop] 8. 商品详情&评价展示

    上文回顾 上节 我们实现了根据搜索关键词查询商品列表和根据商品分类查询,并且使用到了mybatis-pagehelper插件,讲解了如何使用插件来帮助我们快速实现分页数据查询.本文我们将继续开发商品详 ...

  7. [springboot 开发单体web shop] 3. 用户注册实现

    目录 用户注册 ## 创建数据库 ## 生成UserMapper ## 编写业务逻辑 ## 编写user service UserServiceImpl#findUserByUserName 说明 U ...

  8. web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)

    看到一篇环境搭建文章,详细又全面,这里就不一一重复了 http://blog.csdn.net/dyllove98/article/details/9390649 其它: 1.框架介绍      整个 ...

  9. 开发单体web shop] 6. 商品分类和轮播广告展示

    目录 商品分类&轮播广告 商品分类|ProductCategory 需求分析 开发梳理 编码实现 轮播广告|SlideAD 需求分析 开发梳理 编码实现 福利讲解 源码下载 下节预告 商品分类 ...

随机推荐

  1. css或Angular框架限制文本字数

    提需求的来了 某一期产品迭代时,新增了一个小功能,即:在单元格中的文本内容,字符超过20个字的时候,需要截断,并显示20个字符+一个省略号,未超过,无视. 这需求看上去不怎么复杂,看起来可以用css做 ...

  2. SSM框架手动实现分页逻辑(非PageHelper)

    第一种方法:查询出所有数据再分页 分析: 分页时,需要获得前台传来的两个参数,分别为pageNo(第几页数据),pageSize(每页的条数); 根据这两个参数来计算出前端需要的数据是查出数据list ...

  3. VisualStudio自定义调试工具(GIS)

    闲言     偶尔分享技术,对,这次就是偶尔,几年一次(技术自卑).上周末竟然有人催更,也是受宠...若惊.以后会主动定期更的,可能. 前言   Visual Studio 调试器自带很多调试工具,调 ...

  4. window连接远程服务器报函数不支持之解决方案

    1.针对window10系统 Windows+R,输入cmd,输入gpedit.msc 然后就可以启动远程连接了 2.针对window7用户 没有上述的第一个操作选项 1. 打开注册表,快捷输入 “r ...

  5. 一文彻底理解Redis序列化协议,你也可以编写Redis客户端

    前提 最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析 ...

  6. jq方法写选项卡的基本原理以及三种方法

    使用jq写选项卡,告别了繁琐的循环以及命名规范 基本原理: 1.当某一个btn被选中时,将这个btn的背景颜色设为橘色,其余兄弟btn背景颜色设为空(none) 2.如果子div与btn的索引相同,就 ...

  7. Angular: If ngModel is used within a form tag, either the name attribute must be set or the form control must be defined as ‘standalone’ in ngModelOptions.

    在Angular中,动态生成的Html控件,如果没有name属性并且在ts中要操作Model的内容.就会引发如题的错误. 解决方案两个: 加上name的属性 设置ngModelOptions   [n ...

  8. python编程基础之二十二

    字典:字典属于可变对象,但是不属于序列,内部是通过哈希方式存储的,内部保存的是一个个键值对key:value 字典的键是唯一的, 字典查找速度比较快 d1 = {}  #括号里面用键值对表示 d2 = ...

  9. 洛谷NOIp热身赛 T2123 数列游戏

    题目背景 此题为改编题,特别鸣谢倪星宇同学. 有一次,HKE和LJC在玩一个游戏. 题目描述 游戏的规则是这样的:LJC在纸上写下两个长度均为N的数列A和B,两个数列一一对应.HKE每次可以找两个相邻 ...

  10. SEER流量众筹模块开发测试网络及使用文档发布

    SEER利用区块链奖励机制,可解决传统体育赛事痛点,提高行业运转效率.比如提高赛事方收入,让观众自由选择想看的比赛,给予赛事众筹的参与者贡献影响力,使其获得由智能合约量化的激励等.此功能可广泛应用于包 ...