[项目实战篇] Emos在线办公小程序--搭建项目

1.创建ck-emos项目

1)创建SpringBoot项目;

2)添加Maven依赖:

        SpringBoot DevTool 热部署插件;

        Lombook 生成SET/GET方法;

        SpringWeb SpringMVC框架;

        Mysql Driver Mysql数据库驱动;

        Mybatis Framework Mybatis 持久层框架;

        Spring Data Redis 操作Redis技术;

        Spring Data MongoDB 操作MongoDB技术;

        Spring For RabbitMQ RabbitMQ;

        Java Mail Sender 邮件发送技术;

        Quartz Scheduler 定时技术

3) 项目配置:

server:
  #配置Tomcat
  tomcat:
    uri-encoding: UTF-8
    threads:
      max: 200
      min-spare: 30
    connection-timeout: 5000ms
  port: 8080
  servlet:
    context-path: /emos
spring:
  #配置Mysql数据源
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://1.117.153.182:3305/ckkj_emos?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      username: root
      password: ****
      initial-size: 8
      max-active: 16
      min-idle: 8
      max-wait: 60000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
  #配置Redis数据源
  redis:
    database: 0
    host: 1.117.153.182
    port: 6379
    password:
    jedis:
      pool:
        max-active: 1000
        max-wait: -1ms
        max-idle: 16
        min-idle: 8
  #配置mongodb数据库
  data:
    mongodb:
      host: 1.117.153.182
      port: 27017
      database: emos
      authentication-database: admin
      username: admin
      password: ****
#配置Mybatis
mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.ck.emos.app.pojo
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
#配置日志输出
logging:
  level:
    root: info
    com:ck:emos:app:mapper : warn
  pattern:
    console: "%d{HH:mm:ss} %-5level %msg%n"

2.整合工具包

1)自定义异常类:

        自定义异常类继承的父类,我没有选择Exception。因为Exception类型的异常,我们必须要手动显式处理,要么上抛,要么捕获。我希望我定义的异常采用既可以采用显式处理,也可以隐式处理,所以我选择继承RuntimeException这个父类。RuntimeException类型的异常可以被虚拟机隐式处理,这样就省去了我们很多手动处理异常的麻烦。

package com.ck.emos.app.common;

import lombok.Data;

/**
 * <p>
 * 自定义异常工具类
 * </p>
 *
 * @author wzh
 * @since 2022-03-26
 */
@Data
public class EmosException extends RuntimeException{

    /**
     * 错误消息
     */
    private String msg;

    /**
     * 状态码
     */
    private Integer code=500;

    public EmosException(String msg){
        super(msg);
        this.msg=msg;
    }

    public EmosException(String msg,Throwable e){
        super(msg,e);
        this.msg=msg;
    }

    public EmosException(String msg,Integer code){
        super(msg);
        this.msg=msg;
        this.code=code;
    }

    public EmosException(String msg,Integer code,Throwable e){
        super(msg,e);
        this.msg=msg;
        this.code=code;
    }
}

2)定义标准返回对象

        采用Apache 的 httpcomponents 库里面的 HttpStatus 类封装了很多状态码;

package com.ck.emos.app.common;

import cn.hutool.http.HttpStatus;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 标准返回对象
 * </p>
 *
 * @author wzh
 * @since 2022-03-26
 */
public class Result extends HashMap<String,Object> {

    public Result(){
        put("code", HttpStatus.HTTP_OK);
        put("msg","成功");
        put("data","");
    }

    /**
     * 生成链式调用put方法
     * @param key
     * @param value
     * @return
     */
    public Result put(String key,Object value){
        super.put(key,value);
        return this;
    }

    /**
     * 生成静态工程方法
     * @return
     */
    public static Result success(){
        return new Result();
    }

    public static Result success(String msg,Object data){
        Result result = new Result();
        result.put("msg",msg);
        result.put("data",data);
        return result;
    }

    public static Result success(Object data){
        Result result = new Result();
        result.put("data",data);
        return result;
    }

    public static Result success(Map<String,Object> map){
        Result result = new Result();
        result.putAll(map);
        return result;
    }

    public static Result error(){
        Result result = new Result();
        result.put("code",HttpStatus.HTTP_INTERNAL_ERROR);
        result.put("msg","系统异常,请联系管理员!");
        return result;
    }

    public static Result error(String msg){
        Result result = new Result();
        result.put("code",HttpStatus.HTTP_INTERNAL_ERROR);
        result.put("msg",msg);
        return result;
    }

    public static Result error(Integer code,String msg){
        Result result = new Result();
        result.put("code",code);
        result.put("msg",msg);
        return result;
    }
}

3)集成Swagger:

 

package com.ck.emos.app.config;

import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 集成Swagger
 * </p>
 *
 * @author wzh
 * @since 2022-03-26
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        // 配置页面基本信息
        ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
        apiInfoBuilder.title("Emos在线办公系统");
        ApiInfo apiInfo = apiInfoBuilder.build();
        docket.apiInfo(apiInfo);
        // 添加类的方法
        ApiSelectorBuilder selectorBuilder=docket.select();
        // 先设定所有类的所有方法
        selectorBuilder.paths(PathSelectors.any());
        // 定义扫描的标识注解
        selectorBuilder.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class));
        docket=selectorBuilder.build();

        // 添加单点登录
        ApiKey apiKey = new ApiKey("token", "token", "header");
        List<ApiKey> apiKeyList = new ArrayList<>();
        apiKeyList.add(apiKey);
        docket.securitySchemes(apiKeyList);

        // 设定作用域--三层封装
        AuthorizationScope scope=new AuthorizationScope("global","accessEverything");
        AuthorizationScope[] scopes={scope};
        SecurityReference reference=new SecurityReference("token",scopes);
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(reference);
        SecurityContext context=SecurityContext.builder().securityReferences(securityReferences).build();
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(context);
        docket.securityContexts(securityContexts);
        return docket;
    }
}

4) 添加后端校验:

package com.ck.emos.app.param;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;

@ApiModel(value = "前端请求封装参数")
@Data
public class TestSayHelloParam {

    @NotNull
    @ApiModelProperty(value = "名称")
    private String name;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值