space开发日志(0~1)

165 阅读5分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

Space项目简介

虽然标题写的是blog,但是因为我更希望他更能承载我更多记忆已经更多的个性化,所以我给他取名Space,而前缀也可以改成《我的个人log》。为什么取名space呢?其实有点qq空间那个味道,我希望我能在这个项目上记录的不仅仅是文字,我希望可以记录更多,比如说图片、语音甚至视频,所以我左思右想,突然想起网页版的qq空间。其实颇为相似,所以取名为Space。

以前一直特别想要拥有自己的个人博客,可以给我自身学习的知识归档总结。但出于某些原因一直没有实施,那今天space,它终于打算立项了。

目前他的短期目标是实现简单的后台文章写入,但是想到之后的目标,对于我这种刚开始工作没多久的同学,还是很有挑战的。最近我也在努力学习前端知识,希望能为这个项目,带来比较好的前端表现。

项目地址

github.com/Viciivodka7…

架构

前端:React全家桶

后端:

jdk8 (或许后续会升级到17)

SpringBoot 2.5.6

权限控制SpringSecurity

数据库MySQL

缓存Redis

ORM MyBatis

消息队列Kafka(待学习)

定时任务Quartz(带学习)

ElasticSearch(后续)

项目分包

image-20211114002901803

愿景

目前这个项目不确定的地方还是很多,我希望我能坚持下来,希望至少能帮助学生向实际项目踏出一步。

从项目构架到实际的功能,回答为什么这么做(虽然我不一定能答出来,希望大家一起进步)。

预期为2022年1月之前,做出初步的雏形以及基础功能。

Space(1)

初始化依赖以及配置

我们在项目的主pom文件当中,我们选择spring-boot-starter-parent引入springboot的依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.6</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

使用<dependencyManagement></dependencyManagement>标签来管理我们整个项目的依赖。

dependencyManagement不像我们在dependency标签中引入的依赖,我们刷新maven之后会立刻引进,而dependencyManagement只相当于声明以及版本管理。

我们在子模块的pom文件中就可以不写版本,它会使用dependencyManagement的版本管理

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

Q1: 为什么这样做?

A1: 这样是可以避免在多人员的开发中在不同模板引入不同版本的依赖,方便我们整体的管理整个项目中的依赖以及版本号。

注意:这里数据库jdbc依赖,需要根据你的数据库版本选择,我的数据库版本为8.0.27,所以我的依赖为

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

我们首先根据项目分层在各个模块中的pom文件加上对应依赖,具体的引入的依赖见可以看看项目文件详情。

之后我选择在starter模块中添加application.yml配置

spring:
  profiles:
    active: dev # 开启开发环境

以及application-dev.yml配置编写我们现在的配置

server:
  port: 2425
  servlet:
    context-path: /
# 下面的配置不是立刻需求,可以先注释掉
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver # 我使用的数据库版本是 8.0.27 老版本 com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/space #配置你的数据库地址
    username: root # 用户名
    password: root123 # 密码
    druid:
      #2.连接池配置
      #初始化连接池的连接数量 大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      #配置获取连接等待超时的时间
      max-wait: 60000
      #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 5000
      #3.基础监控配置
      web-stat-filter:
        enabled: true
        url-pattern: /*
        #设置不统计哪些URL
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 100
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true
        #设置监控页面的登录名和密码
        login-username: admin
        login-password: admin
        allow: 127.0.0.1
        #deny: 192.168.1.100


mybatis:
  type-aliases-package: com.sou7h.entity
  mapper-locations: classpath:mappers/*.xml # 不要写错成config-location


可能有的小伙伴会发现我们有很多个配置文件,application.ymlapplication-dev.yml以及application-prod.yml

这些个配置分别对应基础配置,开发环境配置以及生产环境配置。在有些公司还会有测试环境的配置application-test.yml

启动环境

按照分层确定好依赖关系后,我们在最底层的core模块增加spring-boot-starter-web依赖

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

在我们的starter模块下增加启动类SpaceApplication

image-20211114225019479

/**
 * @author sou7h
 * @description 启动入口
 * @date 2021年11月08日 8:22 下午
 */
@SpringBootApplication
public class SpaceApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(SpaceApplication.class,args);
    }
​
}

有关IDEA自动生成注解 可以看这篇文章 my.oschina.net/jeecg/blog/…

点击运行我们就可以正常启动了。

写一个Hello接口

我们在web模块中建立如下,文件夹以及HelloController

image-20211114225440709

我们简单的写一个接口,测试一下

/**
 * @author sou7h
 * @description Hello Space
 * @date 2021年11月14日 12:23 下午
 */
@RestController
public class HelloController {
​
    @GetMapping("/")
    public String hello(){
        return "Hello Space !";
    }
​
}

成功返回数据。

image-20211114225716816

Q2: @RestController注解和@Controller注解有什么不同

A2: @RestController注解相当于@Controller注解加上@ResponseBody,他们的作用相当于创建RESTful Web服务。

RESTful Web服务控制器只返回对象,对象数据作为JSON / XML直接写入HTTP响应。

而单独的@Controller注解相当于创建传统的Spring MVC控制器,返回一个字符串,对应我们resource/webinfo目录下的html或者jsp页面

而目前的流行的做法,依然是前后端分离的思想。后端只需要返回前端需要的数据就好。