SpringBoot实战——仿b站项目(一)

Springboot实战

本次内容为课程导学项目环境搭建基本测试demo

1.课程导学

1.1.为什么选b站

项目角度:规模大且不同种类,流量大,个性化功能

技术角度:经典高并发异步问题、视频流+弹幕定制功能

1.2.学习方法

  • 准备要充分
  • 实践出真知
  • 不懂就要问
  • 举一而反三
  • 温故而知新
  • 坚持即胜利

2.项目环境搭建

2.1.项目架构

2.1.1.业务(功能)架构
  • 顶层:用户服务(登录注册、大会员权限、查找感兴趣视频等)
  • 中间层:在线视频流播放+实时弹幕
  • 底层:管理后台(视频上传、数据统计、系统消息推送)
2.1.2.技术架构
  • 技术选型:Springboot2.x + MySQL + MyBatis + Maven
  • 开发模式:经典MVC,模式控制层(Controller层)、服务层(Service层)、数据层(Dao层)
2.1.3.部署架构
  • 前端:服务转发 + 负载均衡(请求数量大时,按一定规律转发请求到服务器)
  • 后端:业务处理+ 功能实现
  • 工具:缓存、队列

2.2.开发环境搭建

2.2.1.开发环境
  • 操作系统:Linux/Mac/Windows均可
  • 开发工具:IDEA
  • 必备:JDK1.8、Maven
2.2.2.创建多模块、多环境项目
  • 多模块:创建MVC模式多模块项目,模式控制层(Controller层)、服务层(Service层)、数据层(Dao层)

创建一个普通的maven项目,想maven项目中创建多个模块bilibili-apibilibili-servicebilibili-dao
在这里插入图片描述

  • 多环境:添加不同环境的properties配置文件

application.properties文件:多环境下,相同环境的复用,使项目开发灵活
在这里插入图片描述

2.2.3.配置JDK与Maven

1.JDK配置:目录:file -> project Structure
在这里插入图片描述

2.Maven配置:

本地maven仓库的设置可以加快下载包的速度,提高开发效率!

打开所下载的maven,找到conf下的setting.xml文件,修改文件到自定义的仓库文件夹中,修改后保存即可(根据自己文件名字、路径修改!)
在这里插入图片描述

在IDEA中重写Maven默认配置环境,在file -> Settings中搜索maven修改,applyOK即可
在这里插入图片描述

2.2.4.运行仿bilibili后端项目

1.在pom文件中引入Springboot框架相关依赖(父pom.xml文件中)

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.6.4</version>
</parent>

在添加dependencies模块,添加spring-boot-starter-web,版本与parent中相同

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.6.4</version>
    </dependency>
</dependencies>

2.在子模块pom文件中添加模块间依赖关系

api在最上层,service在中间层,dao在最底层,dao不会与其他层产生依赖,只需与service层有关联,api层关联dao

所以在service模块的pom.xml中添加:

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>bilibili-dao</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

同理api模块的pom.xml中添加:

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>bilibili-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

3.添加启动入口,启动项目

(1)在api模块的src-main-java创建包com.lemon(最顶级的包),直接存放我们的启动类,在com.lemon中创建启动类BilibiliAPP.java,在类中添加入口,编写代码如下:

/**
 * @program: bilibili
 * @description: 项目启动类
 * @author: lemon
 **/
// 标明我们的项目是Springboot项目
@SpringBootApplication
public class BilibiliApp {
    public static void main(String[] args) {
        // ApplicationContext项目上下文环境
        ApplicationContext app = SpringApplication.run(BilibiliApp.class, args);
    }
}

(2)选择启动加载配置文件

因为是多环境,要选择启动加载配置文件,在service模块的application.properties文件中修改:

# profile
spring.profiles.active=test

(3)启动项目

debug方式启动,没有错误即是运行成功!

(4)启动类文件结构
在这里插入图片描述

2.2.5.搭建数据库与持久层框架

1.数据库

选用MySQL数据库,特点是:体积小、速度快、开源

2.在项目中配置MySQL数据库

(1)在MySQL中创建好数据库及数据库表

CREATE TABLE `t_demo` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `createTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

插入数据:
在这里插入图片描述

(2)在父项目pom.xml文件中添加MySQL数据库驱动依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

(3)在项目配置文件中配置链接

测试模块中添加:

# datasource
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=Lemon
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3.持久层框架——MyBatis

MyBatis特点是XML形式管理、支持动态SQL

(1)在项目中添加MyBatis框架依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

(2)在配置文件中配置MyBatis

service模块的配置文件中添加:

# 所有mapper存放路径扫描配置
mybatis.mapper-locations=classpath:mapper/*.xml
# 以包形式扫描,扫描到的class/interface由mybatis统一实例化,再与xml进行关联
mybatis.type-aliases-package=com.lemon.bilibili.dao

dao模块中添加包、接口如下:
在这里插入图片描述

DemoDao.java中:

@Mapper
public interface DemoDao {
}

demo.xml中:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace是与dao中相关的实体类java文件对应-->
<mapper namespace="com.lemon.bilibili.dao.DemoDao">

</mapper>

(3)阶段性Demo

dao

DemoDao.java中添加方法接口

public Long query(Long id);

demo.xml中添加映射查询语句,要求:id与查询方法名字相同,参数、结果类型保持一致;

#{id}中传递参数对应parameterType即输入参数,daoid字段;

数据库中属性名与实体类中名字相同,在写xml文件时可以直接用一样的名称,可以自动对应上,节省代码编写量

<select id="query" parameterType="java.lang.Long" resultType="java.lang.Long">
    select id from t_demo where id = #{id}
</select>

service

创建包,创建类DemoService.java,代码:

/**
 * @program: bilibili
 * @description: Demo的Service
 * @author: lemon
 **/
// 让Springboot在启动时把DemoService作为一个需要发布的bean,添加到上下文中,包含@Component注解
@Service
public class DemoService {

    // 引入,依赖注入
    @Autowired
    private DemoDao demoDao;

    public Long query(Long id) {
        return demoDao.query(id);
    }
}

api

创建包,创建类DemoApi.java,代码:

/**
 * @program: bilibili
 * @description: Demo的Api
 * @author: lemon
 **/
// 包含@Component注解
@RestController
public class DemoApi {

    @Autowired
    private DemoService demoService;

    @GetMapping("/query")
    public Long query(Long id) {
        return demoService.query(id);
    }
}

④运行项目,打开Postman测试
在这里插入图片描述

成功!

2.3.热部署

2.3.1.概述
  • 热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效
  • 热部署方式:spring-boot-devtools工具 + IDEA配置
2.3.2.实现热部署

开启IDEA自动构建(Build project automatically)选项,在Settings - Advanced Settings中勾选Compile autoMake allow when app running(IDEA 2021以上版本在此修改)
在这里插入图片描述
在这里插入图片描述

启动类中开启热部署(Running Application Update Policies
在这里插入图片描述

pom文件中添加spring-boot-devtoolsservice的配置文件中添加配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
# springdevtools
spring.devtools.restart.enabled=true
2.3.3.测试热部署

(1)将query方法参数返回值类型修改为Map<String, Object>api层、service层、dao层(包括demo.xml映射文件)均要修改;以dao层为例:

@Mapper
public interface DemoDao {
    public Map<String, Object> query(Long id);
}
<select id="query" parameterType="java.lang.Long" resultType="java.util.Map">
    select * from t_demo where id = #{id}
</select>

在Postman中测试,可以看到返回值为Map集合
在这里插入图片描述

(2)再将query方法参数返回值类型修改为Long类型

(3)不重启项目,直接在Postman中测试,可以看到返回值为Long类型了!
在这里插入图片描述

热部署成功!

2.4.项目结构

在这里插入图片描述

未完待续~

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 很抱歉,作为AI语言模型,我无法提供实战仿b站高性能后端项目的具体指导。不过,Spring Boot 2.x 是一个非常流行的Java框架,可以用于构建高性能的后端项目。如果您想学习如何使用Spring Boot 2.x构建后端项目,可以参考相关的教程和文档,例如Spring官方文档、Spring Boot官方文档、Spring Boot实战等。同时,也可以参考一些开源的Spring Boot项目,了解如何使用Spring Boot构建实际项目。 ### 回答2: Spring Boot是基于Spring框架构建的快速开发框架,通过自动配置和约定优于配置的原则,使得开发过程更加简单、快速。B站是目前国内最知名的视频分享网站之一,在高并发的访问量下,其后端性能要求十分高。 实战仿B站高性能后端项目首先需要对项目进行需求分析和架构设计。在本项目中,只考虑视频上传和播放这两个功能,需求分析如下: 1. 视频上传 - 用户可以上传自己的视频 - 视频需要有标题、标签、简介等信息 - 上传需要支持多种格式,并且需要进行格式转换 - 视频需要进行审核,审核通过后才能在网站上播放 2. 视频播放 - 用户可以搜索、查看已上传的视频 - 视频需要进行分页显示,每页10个视频 - 视频需要支持全屏播放、倍速播放等功能 根据以上需求,我们可以设计出如下的系统架构: - 前端框架使用Vue.js,利用Axios进行异步请求 - 后端采用Spring Boot 2.x,数据库使用Mysql - 视频上传使用FFmpeg进行格式转换,上传后存储到FastDFS分布式文件系统中 - 视频审核使用机器学习算法实现,审核模型可使用OpenCV、TensorFlow等框架 - 视频播放使用HTML5 Video标签实现,后端提供视频流接口支持全屏、倍速等功能 在实现过程中,需要注意以下几点: 1. 确定好数据库表结构,设计好合理高效的SQL语句 2. 合理使用缓存、队列、分布式锁等技术,提高系统性能和稳定性 3. 对于各个模块,进行单元测试和集成测试,保证代码的质量和稳定性 4. 使用日志系统对请求进行记录,便于排查问题和分析性能瓶颈。 实现完整的仿B站高性能后端项目是一项很复杂的任务,需要团队中的开发人员具备扎实的技术背景和工程实践经验。然而,在学习和实践过程中,可以借鉴和参考其他类似项目的实现方式和经验,不断提高自己的技能水平,逐步成为真正的技术专家。 ### 回答3: SpringBoot是现在非常流行的一个开源框架,它可以快速方便地创建一个Java Web项目。而B站作为一个视频分享网站,在高并发的情况下,需要高性能的后端支持。由此,学习SpringBoot,并实战仿B站高性能后端项目,有助于我们深入学习并掌握SpringBoot框架,同时也可以提高我们的编程技能,为日后开发高性能的Web项目奠定基础。 实战仿B站高性能后端项目需要多个步骤。首先需要搭建项目结构,包括添加Maven依赖、建立实体类、服务类和控制类等,这些步骤在网上有许多教程可以学习。接下来,需要集成Redis和MongoDB等高性能缓存数据库,以提供高效的数据读取和写入。其中,Redis可以用于缓存热点数据和Session,MongoDB可以用于存储高并发情况下的大量写入数据。此外,还需要进行数据库优化,如增加索引、使用连接池等等,以提高数据库查询效率和数据处理能力。 在处理高并发请求时,需要使用线程池和异步处理等技术。线程池可以有效地管理线程资源,并对任务进行统一分配和处理,以提高服务器的性能。异步处理可以将不需要立即执行的任务推迟处理,从而减小服务器的负载。当然,这些技术的使用需要针对具体场景进行优化,不可随意使用。 最后,还需要对系统进行并发性和安全性测试,以保证系统的稳定性和安全性。并发性测试可以模拟多用户同时访问系统的情况,检查系统的响应时间和资源消耗情况。安全性测试包括SQL注入、XSS攻击、CSRF攻击和文件上传漏洞等多个方面,这些攻击都可能导致系统被入侵或数据被盗取,因此必须对其进行充分的测试。 总之,实战仿B站高性能后端项目是一个非常有价值和挑战的任务,需要我们具备一定的Java编程能力、Web开发技巧和服务器管理经验。通过学习和实践,我们可以提高自己的开发水平,并为日后开发高性能的Web应用奠定基础。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值