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
@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; public class Result extends HashMap{ public Result(){ put("code", HttpStatus.HTTP_OK); put("msg","成功"); put("data",""); } public Result put(String key,Object value){ super.put(key,value); return this; } 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 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;
@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 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 securityReferences = new ArrayList<>();
securityReferences.add(reference);
SecurityContext context=SecurityContext.builder().securityReferences(securityReferences).build();
List 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;
}


![[项目实战篇] Emos在线办公小程序--搭建项目 [项目实战篇] Emos在线办公小程序--搭建项目](http://www.mshxw.com/aiimages/31/784850.png)
