欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

框架搭建

程序员文章站 2022-03-02 15:20:13
...

一、Result结果封装

后端返回给前端的结果应该是一个规范化的,每个回复的格式都是一样的。它应该包括:code,message,data

1.Result

Result类应该包括这三者,并且在成功时应该有一种预设的返回。

@Data
public class Result<T> {
    private int code;
    private String msg;
    private T data;

    private Result(T data) {
        this.code = 200;
        this.msg = "success";
        this.data = data;
    }

    private Result(CodeMsg cm) {
        if(cm==null) return;
        this.code = cm.getCode();
        this.msg = cm.getMsg();
    }

    /**
     * 成功时调用
     */
    public static <T> Result<T> success(T data){
        return new Result<T>(data);
    }
    /**
     * 失败时调用
     */
    public static <T> Result<T> error(CodeMsg cm){
        return new Result<T>(cm);
    }
}

这里将构造函数设为私有的,是为了让调用者只能按照我们预先设定好的来返回信息。(按理来说应该没有Set方法,这里由于直接使用了Lombok,就先不删了)

注意到有的方法传入的值是CodeMsg cm,这就是一会儿要写的类。

2.CodeMsg

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CodeMsg {
    private int code;
    private String msg;

    public static CodeMsg SUCCESS = new CodeMsg(200,"成功");
    public static CodeMsg SERVER_ERROR = new CodeMsg(500100,"服务端异常");
}

CodeMsg类只有两个字段,而且也是code、msg。这个类存在的意义,就是让调用者可以更加轻松的获取到想要返回的信息,也是为了更好的封装。

  • 如果没有这个类,那么返回一个Result是酱婶儿的

    return new Result(500100,"服务端异常",data);
    
  • 如果有了CodeMsg类,并且已经在里面定义了一个这样的静态属性

    return new Result(CodeMsg.SERVER_ERROR);
    

可以看到,这样一来用户就可以直接调用对应的错误名即可。否则任由用户自己定义很容易造成多个地方code相同但所代表的消息不同的现象。

二、集成MyBatis

1.添加依赖

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

2.application.properties配置

首先要新建两个包dao,domain。domain存放的是和数据库一一对应的JavaBean。

#MyBatis
mybatis.type-aliases-package=miaosha.domain 
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=3000
mybatis.mapper-locations=classpath:dao/*.xml

以上是MyBatis的配置,陌生的是第三四句,default-fetch-size表示默认一次获取记录条数,防止一次取出过多数据导致内存溢出,但最后获得的结果还是不变的。

default-statement-timeout是指数据库超时设置。

3.druid

然后就需要配置druid,druid是一种数据库连接池,数据库连接池定义如下:

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。

其在application.properties配置如下:

spring.datasource.url=jdbc:mysql://192.168.220.128:3306/miaosha?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.filters=stat
spring.datasource.maxActive=2
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxOpenPreparedStatements=20

这就是那些配置了,虽然不知道能不能用。。。

三、集成Redis

1.安装Redis

在Linux服务器下安装Redis。

  1. 解压压缩包,将文件夹转移至/usr/local/redis。在redis文件夹中执行make指令编译,编译完成后执行make install

  2. 修改配置文件。修改以下几行:

    #允许任何服务器访问redis
    bind 0.0.0.0
    #允许后台执行
    daemonize yes
    #设置密码为123456
    requirepass 123456
    
  3. 启动服务器redis-server ./redis.conf,使用redis-cli启动客户端。使用127.0.0.1:6379> auth 123456指令登录。

  4. 将redis做成一个系统服务。要用到utils/目录下的install_server.sh。

    port:6379
    config:/usr/local/redis/redis.conf
    log:/usr/local/redis/redis.log
    data directory:/usr/local/redis/data
    executable path:/usr/local/bin/redis-server
    

    使用chkconfig --list | grep redis查看是否成功。systemctl start redis_6379启动redis服务。

2.Spring Boot集成Redis

(1)添加依赖

添加Jedis和FastJson的依赖。

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>

(2)添加配置

#redis
spring.redis.host=
spring.redis.port=
spring.redis.timeout=3
spring.redis.password=
spring.redis.pool.max-active=10
spring.redis.pool.min-idle=10
spring.redis.pool.max-wait=3

(3)自己写配置类与服务

package miaosha.redis;

@Data
@Component
@ConfigurationProperties(prefix = "redis")
public class RedisConfig {
    private String host;
    private int port;
    private int timeout;
    private String password;
    private int poolMaxActive;
    private int poolMaxIdle;
    private int poolMaxWait;
}

这里我们要自己写一个Redis的客户端,而不使用RedisTemplate。所以要自己实现get和set方法,然后在其中还要用到序列化与反序列化(工具使用FastJson)

相关标签: 秒杀系统