1、工程搭建与配置

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB是介于关系型和非关系型数据库之间的产品,nosql中最热门的数据库,存储数据是类似于JSON的bson格式的数据,可以存储复杂的数据类型,最大特点是它支持的查询语句非常强大

MongoDB介绍与用法

MongoDB介绍

MongoDB是介于关系型和非关系型数据库之间的产品,nosql中最热门的数据库,存储数据是类似于JSON的bson格式的数据,可以存储复杂的数据类型,最大特点是它支持的查询语句非常强大

特点:

  • 存储Bson数据
  • 强大的查询语句
  • 完整的索引支持

与MySQL的对比:

table-collection:表-集合
row-document:行-文档
column-field:列-域

SQL语句比MySQL更简单:

use+文档名:有切换没有创建

增删改查:

db.student.insert({key:value});

内置角色:超级用户、用户、管理员、集群管理员和备份恢复

作用:MongoDB中主要保存系统日志信息

MongoDB没有表连接,会自动在每个集合中添加_id主键

代码实现

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("student");
Document myDoc = collection.find().first();
String json = myDoc.toJson();

项目介绍

用户通过在线练习、在线考试等学习内容,最终掌握所学的IT技能,并能在工作中熟练应用,学成在线采用B2B2C业务模式,即向企业或个人提供在线教育平台提供教学服务,老师和学生通过平台完成整个教学和学习的过程,市场上类似的平台有:网易云课堂、腾讯课堂等,学成在线的特点是IT职业课程在线教学

技术特点

采用当前流行的前后端分离架构开发

对一些图片、CSS、视频等资源从CDN(内容分发网络)调度访问提高访问速度

所有的请求全部经过负载均衡器

消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接

索引库:存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接

缓存:作为系统的缓存服务,存储课程信息、分类信息、用户信息等,与微服务层的所有服务连接

文件存储:提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份

流媒体服务: 作为流媒体服务器,存储所有的流媒体文件 DevOps(开发运维): Eureka服务治理中心,提供服务治理服务 Spring

Cloud Config服务配置管理中心:提供服务配置管理服务 Hystrix

Dashboard服务熔断监控:监控熔断的请求响应时间、成功率 Zipkin服务 追踪监控:监控服务调用链路健康情况

Jenkins持续集成服务:提供系统持续集成服务

Git/GitLab代码管理服务:提供git代码管理服务

ELK日志分析服务:提供elk日志分析服务

Docker容器化部署服务:将本系统所有 服务采用容器化部署方式

Maven项目管理工具:提供管理项目所有的Java包依赖、项目工程打包服务

技术栈:

学成在线服务端基于Spring Boot构建,采用Spring Cloud微服务框架

持久层:MySQL、MongoDB、Redis、ElasticSearch

数据访问层:使用Spring Data JPA、Mybatis、Spring Data Mongodb等

业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等

控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等

微服务治理:Eureka、Zuul、Hystrix、Spring Cloud Config等


开发步骤:

1、需求分析

2、接口定义

3、服务端和前端并行开发

4、前后端集成测试

CMS:内容管理系统,对所有网站页面及样式风格进行管理

本项目作为一个大型的在线教育平台,对CMS系统的定位是对各各网站(子站点)页面的管理,主要管理由于运营 需要而经常变动的页面,从而实现根据运营需要快速进行页面开发、上线的需求

前端页面部署

配置虚拟主机访问静态页面

通过server_name名字去访问location下指定路径下的index文件

server {
  listen 80;
  server_name www.xuecheng.com;
  ssi on;
  ssi_silent_errors on;
  location / {
  alias D:\Workspace\webstorm\xcEduUI\xc-ui-pc-static-portal/ ;
  index index.html;
  }
}


通过域名访问localhost需要配置hosts文件,改host文件为:127.0.0.1 www.xuecheng.com


SSI服务器端嵌入

将多个页面合并起来

好处:

1、简化前端代码,避免代码臃肿

2、管理页面

nginx、apache等多数web容器都支持SSI指令

模板+数据就组成一个完整的页面

各工程作用:


parent工程:父工程,提供依赖管理

common工程:通用工程,提供各层封装

model工程:模型工程,提供统一的模型类管理

utils工程:工具类工程,提供本项目所使用的工具类

Api工程:接口工程,统一管理本项目的服务接口


页面查询接口

支持分页及自定义条件查询方式

1、分页查询CmsPage 集合下的数据

2、根据站点Id、模板Id、页面别名查询页面信息

3、Get请求,响应Json数据

Lombok作用:消除java代码的臃肿

三个页面模型类

CmsSite:站点模型、CmsTemplate:页面模板、CmsPage:页面信息

封装请求及响应参数

1、定义请求及响应类型QueryPageRequest

为后期扩展需求,请求类型统一继承RequestData类型

可以提交form表单数据、Json数据和文件等多部件类型

响应结果类型,分页查询统一使用QueryResponseResult ------响应信息待分析

Java枚举类:https://www.jianshu.com/p/ec3de3c6fc63

ResultCode:定义操作是否成功、操作代码和提示信息的接口

CommonCode:实现ResultCode接口的枚举类

QueryResponseResult继承ResponseResult,ResponseResult实现Response。Response定义成功的常量接口

响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据

响应结果统一格式为json


在Api接口工程专门定义接口,在Api工程单独定义接口的原因如下:

1、接口集中管理

2、Api工程的接口将作为各微服务远程调用使用


页面查询接口:

req:页数、每页数、QueryPageRequest

resp:QueryResponseResult

引用spring-data-commons实现条件分页查询,拼接请求和响应参数。

ExampleMatcher:定义条件匹配器、
Pageable pageable = PageRequest.of(page, size);
spring-data-commons是Spring Data Repository的抽象。
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
                .withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.contains());
//实现自定义条件查询并且分页查询
Pageable pageable = PageRequest.of(page, size);
Page<CmsPage> all = cmsPageRepository.findAll(example, pageable);

Mongodb数据库的查询:

引用Spring Data Mongodb依赖

同Spring Data JPA一样Spring Data mongodb也提供自定义方法的规则,如下: 按照findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则定义方法,实现查询操作

Swagger:

当接口定义完成,可以使用工具生成接口文档

Spring Boot 可以集成Swagger,Swagger是全球最大的OAS开发工具框架,来规范RESTful服务开发过程

常用注解:

@Api:修饰整个类

@ApiOperation:修饰类中方法

@ApiParam:修饰方法中的单个参数

@ApiModel:修饰某个实体类

@ApiModelProperty:修饰实体类中的字段

@ApiImplicitParams:修饰多个请求参数

@ApiImplicitParam:修饰单个请求参数

@ApiIgnore:忽略某个api

接口生成工作原理:

1、系统启动,扫描到api工程中的Swagger2Configuration类

2、在此类中指定了包路径com.xuecheng,找到在此包下及子包下标记有@Api注解的ControllerApi接口

3、根据改接口中的Swagger注解生成接口文档


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
Java Maven Android开发
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)2
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)2
127 0
|
6月前
|
前端开发 应用服务中间件 nginx
Javaweb之前端工程打包部署的详细解析
6 打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 前端工程打包 通过nginx服务器发布前端工程 6.1 前端工程打包
173 0
Javaweb之前端工程打包部署的详细解析
|
22天前
|
存储 API 开发工具
创建一个新的工程
说明 在运行DevEco Studio工程时,建议每一个运行窗口有2GB以上的可用内存空间。
30 1
|
13天前
|
Java 开发工具 Maven
工程搭建与验证
工程搭建与验证
21 0
|
Java Linux Maven
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)1
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)1
168 0
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)1
|
6月前
Tars测试工程创建
Tars测试工程创建
|
Java Maven 数据库
02-Activiti工程搭建
手把手教你如何工程搭建
105 0
|
存储 JSON C++
VS配置新项目
VS配置新项目
|
XML JSON 分布式计算
工程搭建_创建|学习笔记
快速学习工程搭建_创建
工程搭建_创建|学习笔记
|
微服务
项目配置
项目配置
105 0