工作总结

TODO

spring拦截器 过滤器

线程+线程池

文件系统

消息队列mq

activi 流程

maven

  1. 加入本地jar包
    mvn install:install-file -DgroupId=cn.com.citycloud -DartifactId=authorization -Dversion=1.0 -Dpackaging=jar -Dfile=authorization.jar完整路径

mvn install:install-file -DgroupId=com.citycloud.qcloud -DartifactId=qcloud-oauth2-client -Dversion=2.2.0 -Dpackaging=jar -Dfile=qcloud-oauth2-resource-2.2.0.RELEASE.jar

  1. 本地的包放在本地文件夹,加入pom文件
<scope>systemscope>
<systemPath>${project.basedir}/lib/xxx.jarsystemPath>

## 这种方式引入的jar包在打包时不会被包含在war包中
  1. pom

<groupId>xxxgroupId> 通常使用全限定的包名区分该项目和其他项目。
<artifactId>xxxartifactId> 通常和项目名称保持统一
<packaging> jar packaging>

<repositories> 发现依赖和扩展的远程仓库列表
    <repository>
        <id>alimavenid>
        <name>aliyun mavenname>       
        <url>http://maven.aliyun.com/nexus/content/groups/public/url>
    repository>
repositories>

<dependencies>

    <scope>testscope>
    从依赖构件列表里,列出被排除的依赖构件集,此元素主要用于解决版本冲突问题       
    <exclusions>
        <exclusion>
            <artifactId>spring-coreartifactId>
            <groupId>org.springframeworkgroupId>
        exclusion>
    exclusions>
<dependencies/>

settings.xml

  1. MIrrors
  • 使用镜像的一些原因:互联网上有一个同步镜像,地理位置更近,速度更快
  • 您希望将特定存储库替换为您可以更好地控制的内部存储库

<mirrors>
    <mirror>
    
      <id>planetmirror.comid>
      <name>PlanetMirror Australianame>
      
      <url>http://downloads.planetmirror.com/pub/maven2url>
      
      <mirrorOf>centralmirrorOf>
    mirror>
  mirrors>


  1. Profiles
    settings.xml中的profile元素是pom.xml profile元素的精简版本。
    它由activation,repositories,pluginRepositories和properties元素组成.
    如果profile在settings.xml中被激活,则其值将覆盖POM或profiles.xml文件中任何等效的ID配置。
 <profile>  
     <id>downloadSourcesid>  
    <properties>  
      <downloadSources>truedownloadSources>  
      <downloadJavadocs>truedownloadJavadocs>             
    properties>  
  profile>  

  1. Repositories
    Repositories是Maven用于填充构建系统的本地存储库的项目的远程集合。它来自这个本地存储库,Maven称之为插件和依赖项。不同的远程存储库可能包含不同的项目,并且在启用的profile下,可以搜索它们以查找匹配的版本或快照工件。

  2. Plugin Repositories
    pluginRepositories元素块的结构类似于repositories元素。 pluginRepository元素指定Maven可以在哪里找到新插件的远程位置。

<profile>  
      <id>nexus_150id>  
      <repositories>  
        <repository>	
          <id>maven-releasesid>  
          <name>local private nexusname>  
          <url>http://115.231.97.150/nexus/repository/releases/url>  
          <releases>  
            <enabled>trueenabled>  
          releases>  
          <snapshots>  
            <enabled>falseenabled>  
          snapshots>  
        repository>  
        <repository>  
          <id>maven-snapshotsid>  
          <name>local private nexusname>  
          <url>http://115.231.97.150/nexus/repository/maven-snapshots/url>  
          <releases>  
            <enabled>falseenabled>  
          releases>  
          <snapshots>  
            <enabled>trueenabled>  
          snapshots>  
        repository>



      repositories>  
      
      <pluginRepositories>  
        <pluginRepository>  
          <id>maven-releasesid>  
          <name>local private nexusname>  
          <url>http://115.231.97.150/nexus/repository/releases/url>  
          <releases>  
            <enabled>trueenabled>  
          releases>  
          <snapshots>  
            <enabled>falseenabled>  
          snapshots>  
        pluginRepository>  
        <pluginRepository>  
          <id>maven-snapshotsid>  
          <name>local private nexusname>  
          <url>http://115.231.97.150/nexus/repository/maven-snapshots/url>  
          <releases>  
            <enabled>falseenabled>  
          releases>  
          <snapshots>  
            <enabled>trueenabled>  
          snapshots>  
        pluginRepository>  
      pluginRepositories> 
    profile>  
  1. 启用Profiles
  <activeProfiles>  
  <activeProfile>nexus_150activeProfile>
      
  activeProfiles> 

日志写法

使用alibab Java Coding Guidelinec插件规范代码

  1. 什么时候写?
    --- 方法入口处(info)
    ---方法退出前(debug,info)
    ----流程分支(info,warn)
    ----异常分支(error)
  2. 写的内容
    ---入参(必选)
    ---方法调用(可选) debug
    ---返回值(可选)
    ---中间变量(可选)
  3. 写的时候在日志中加入可以查询的条件,以便分辨搜索,如
log.warn("[系统名 模块名] xxxxxx");

工具类

  1. 所有的变量和方法都是static
  2. 如果需要用到其他的service,通过spring容器去取
//需要强转类型
(xxxService)SpringContextUtils.getBean("xxxService"); 

业务写法

1. controller

接受多个对象时,必须把多个对象封装成一个VO类来接受

2. swagger注解:

作用范围API使用位置
对象属性@ApiModelProperty用在出入参数对象的字段上
协议集描述@Api用于controller类上
协议描述@ApiOperation用在controller的方法上
Response集@ApiResponses用在controller的方法上
Response@ApiResponse用在 @ApiResponses里边
非对象参数集@ApiImplicitParams用在controller的方法上
非对象参数描述@ApiImplicitParam用在@ApiImplicitParams的方法里边
描述返回对象的意义@ApiModel用在返回对象类上

@ApiImplicitParam

属性取值作用
paramType查询参数类型
path以地址的形式提交数据
query直接跟参数完成自动映射赋值
body以流的形式提交 仅支持POST
header参数在request headers 里边提交
form以form表单的形式提交 仅支持POST
dataType参数的数据类型只作为标志说明,并没有实际验证
Long
String
name接收参数名
value接收参数的意义描述
required参数是否必填
true必填
false非必填
defaultValue默认值

@ApiImplicitParams({ @ApiImplicitParam(paramType = "body", dataType = "MessageParam", 
name = "param", value = "信息参数", required = true) })

在controller类上
@Api(value="用户controller",tags={"用户操作接口"})

在controller方法上
@ApiOperation(value="获取用户信息",tags={"获取用户信息copy"})

在实体类上
@ApiModel(value="user对象",description="用户对象user")

在实体方法上
@ApiModelProperty(value="用户名",name="username")

swagger依赖:

<dependency>
    <groupId>io.springfoxgroupId>
    <artifactId>springfox-swagger2artifactId>
    <version>${springfox-swagger2.version}version>
dependency>
<dependency>
    <groupId>io.springfoxgroupId>
    <artifactId>springfox-swagger-uiartifactId>
    <version>${springfox-swagger-ui.version}version>
dependency>

  1. Do类继承Model,不写其他通用的属性,注释属性中文注释lombak,主键注解@Id

  2. Dto类继承BaseDto,可以写入其他的Do类作为属性(有其他属性,需注解lombak)

  3. Vo类,在controller里作为参数使用注解@ApiModel,@ApiModelProperty,注解lombak

  4. mapper接口,方法参数使用Do类,参数名为record,注解@Mapper

  5. Service 接受参数为Dto,传给mapper的参数为Dto.getRecord(),返回类型为SWrapper

  6. controller extends BaseController方法接受参数Vo,传给service的为Dto,需要把Vo转成Dto通过toDto(Vo,OperateType)方法 返回类型RWrapper

打包

1. jar包:

<build>

    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
    plugins>
    <finalName>springbootdemofinalName>
build>

spring-boot 默认提供内嵌的tomcat,所以打包直接生成jar 包,用java -jar 命令就可以启动。
//nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
//当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中
nohup java -jar test.jar >temp.txt &

Spring程序会按优先级从下面这些路径来加载application.properties配置文件

  • 当前目录下的/config目录
  • 当前目录
  • classpath里的/config目录
  • classpath 跟目录

nohup java -jar -Dspring.config.location=D:\config\config.properties xxx.jar> /xx/nohup.out 2>&1 &

2. war包:

有时候我们更希望一个tomcat 来管理多个项目,这种情况下就需要项目是war 格式的。

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-tomcatartifactId>
    <scope>providedscope>
dependency>

spring-boot-starter-tomcat 是原来被传递过来的依赖,默认会打到包里,所以我们再次引入此依赖,并指定依赖范围为provided,这样tomcat 相关的jar就不会打包到war 里了

添加ServletInitializer将项目打成war包,部署到外部的tomcat中,这个时候,不能直接访问spring boot 项目中配置文件配置的端口。

application.yml中配置的server.port配置的是spring boot内置的tomcat的端口号, 打成war包部署在独立的tomcat上之后, 你配置的server.port是不起作用的

3. assembly插件

为什么需要Assembly插件呢?因为对于服务类型的后台程序,线上运行时一般通过脚本的方式启动和停止,而项目中的目录结构复杂且不够直观,且项目文件也需要合并和过滤,Assembly插件就可以帮助我们完成。

比如现在我们的项目目录如下:

+ src 
    + main 
        + java 
        + resources 
            + jdbc.properties 
        + bin 
            + start.sh 
            + stop.sh 
        + assembly 
            + assembly.xml

最终想要的目录:

+ bin 
    start.sh 
    stop.sh 
+ conf
    jdbc.properties 
+ lib(依赖jar包目录) 
    xxx.jar

分页

  1. 依赖
<dependency>
    <groupId>org.springframework.datagroupId>
    <artifactId>spring-data-commonsartifactId>
    <version>2.1.8.RELEASEversion>
dependency>
<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.2.12version>
dependency>

2.分页封装工具类

public class PageInfoAdapter<T> extends PageImpl<T> {
public PageInfoAdapter(Page page) {
super(page.getResult(), PageRequest.of(page.getPageNum() - 1, page.getPageSize()), page.getTotal());
}
}
  1. controller
public RWrapper listTaskPlan(Pageable pageable,TaskPlan taskPlan)
{
return new RWrapper(taskPlanService.listTaskPlan(pageable,taskPlan));
}
  1. servicepublic
Page> listTaskPlan(Pageable pageable, TaskPlan taskPlan) 
{
    com.github.pagehelper.Page> pageInfo =  PageHelper.startPage(pageable.getPageNumber(),pageable.getPageSize())
.doSelectPage(() ->  taskPlanQueryMapper.listTaskPlan(taskPlan));
    return new PageInfoAdapter(pageInfo);
}

mybatis

  1. mybatis逆向工程
    generatorConfig.xml文件需要加上不生成注释
    自定义的生成文件依赖
<plugin>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-maven-pluginartifactId>
    <version>1.3.5version>
    <configuration>     
  <configurationFile>src/main/resources/mybatis/generatorConfig.xml
  configurationFile>
    <verbose>trueverbose>
    <overwrite>trueoverwrite>
    configuration>
plugin>

<dependency>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-coreartifactId>
    <version>1.3.5version>
    <scope>providedscope>
dependency>

response/request

  1. 给前端返回json格式数据
String json = JsonUtil.bean2Json(object);

response.setCharacterEncoding("utf-8");

response.setContentType("application/json; charset=utf-8");

PrintWriter writer = response.getWriter();

writer.write(json);

  1. 取得request请求地址
referUri = request.getScheme() + "://" + request.getServerName() 
+ ":" + request.getServerPort() + request.getServletPath();

if (request.getQueryString() != null) 
{  
    referUri += "?" + request.getQueryString();
}
%5Btoc%5D%0A%23%20%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93%0A%0A%23%23%20TODO%0A%23%23%23%23%20spring%E6%8B%A6%E6%88%AA%E5%99%A8%20%E8%BF%87%E6%BB%A4%E5%99%A8%0A%23%23%23%23%20%20%E7%BA%BF%E7%A8%8B%2B%E7%BA%BF%E7%A8%8B%E6%B1%A0%0A%23%23%23%23%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%0A%23%23%23%23%20%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97mq%0A%23%23%23%23%20activi%20%E6%B5%81%E7%A8%8B%0A%0A%0A%0A%0A%23%23%20maven%0A%0A1.%20%E5%8A%A0%E5%85%A5%E6%9C%AC%E5%9C%B0jar%E5%8C%85%0Amvn%20install%3Ainstall-file%20-DgroupId%3Dcn.com.citycloud%20-DartifactId%3Dauthorization%20-Dversion%3D1.0%20-Dpackaging%3Djar%20-Dfile%3Dauthorization.jar%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84%0A%3Emvn%20install%3Ainstall-file%20-DgroupId%3Dcom.citycloud.qcloud%20-DartifactId%3Dqcloud-oauth2-client%20-Dversion%3D2.2.0%20-Dpackaging%3Djar%20-Dfile%3Dqcloud-oauth2-resource-2.2.0.RELEASE.jar%0A2.%20%E6%9C%AC%E5%9C%B0%E7%9A%84%E5%8C%85%E6%94%BE%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%8C%E5%8A%A0%E5%85%A5pom%E6%96%87%E4%BB%B6%0A%60%60%60xml%0A%3Cscope%3Esystem%3C%2Fscope%3E%0A%3CsystemPath%3E%24%7Bproject.basedir%7D%2Flib%2Fxxx.jar%3C%2FsystemPath%3E%0A%0A%23%23%20%E8%BF%99%E7%A7%8D%E6%96%B9%E5%BC%8F%E5%BC%95%E5%85%A5%E7%9A%84jar%E5%8C%85%E5%9C%A8%E6%89%93%E5%8C%85%E6%97%B6%E4%B8%8D%E4%BC%9A%E8%A2%AB%E5%8C%85%E5%90%AB%E5%9C%A8war%E5%8C%85%E4%B8%AD%0A%60%60%60%0A3.%20pom%0A%60%60%60xml%0A%0A%3CgroupId%3Exxx%3C%2FgroupId%3E%20%E9%80%9A%E5%B8%B8%E4%BD%BF%E7%94%A8%E5%85%A8%E9%99%90%E5%AE%9A%E7%9A%84%E5%8C%85%E5%90%8D%E5%8C%BA%E5%88%86%E8%AF%A5%E9%A1%B9%E7%9B%AE%E5%92%8C%E5%85%B6%E4%BB%96%E9%A1%B9%E7%9B%AE%E3%80%82%0A%3CartifactId%3Exxx%3C%2FartifactId%3E%20%E9%80%9A%E5%B8%B8%E5%92%8C%E9%A1%B9%E7%9B%AE%E5%90%8D%E7%A7%B0%E4%BF%9D%E6%8C%81%E7%BB%9F%E4%B8%80%0A%3Cpackaging%3E%20jar%20%3C%2Fpackaging%3E%0A%0A%3Crepositories%3E%20%E5%8F%91%E7%8E%B0%E4%BE%9D%E8%B5%96%E5%92%8C%E6%89%A9%E5%B1%95%E7%9A%84%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E5%88%97%E8%A1%A8%0A%20%20%20%20%3Crepository%3E%0A%20%20%20%20%20%20%20%20%3Cid%3Ealimaven%3C%2Fid%3E%0A%20%20%20%20%20%20%20%20%3Cname%3Ealiyun%20maven%3C%2Fname%3E%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2Fmaven.aliyun.com%2Fnexus%2Fcontent%2Fgroups%2Fpublic%2F%3C%2Furl%3E%0A%20%20%20%20%3C%2Frepository%3E%0A%3C%2Frepositories%3E%0A%0A%3Cdependencies%3E%0A%3C!--compile%20%E9%BB%98%E8%AE%A4%E5%B0%B1%E6%98%AFcompile%2C%E4%BE%9D%E8%B5%96%E9%A1%B9%E7%9B%AE%E9%9C%80%E8%A6%81%E5%8F%82%E4%B8%8E%E5%BD%93%E5%89%8D%E9%A1%B9%E7%9B%AE%E7%9A%84%E7%BC%96%E8%AF%91%EF%BC%8C%E5%90%8E%E7%BB%AD%E7%9A%84%E6%B5%8B%E8%AF%95%EF%BC%8C%E8%BF%90%E8%A1%8Ctest%20%E4%BE%9D%E8%B5%96%E9%A1%B9%E7%9B%AE%E4%BB%85%E4%BB%85%E5%8F%82%E4%B8%8E%E6%B5%8B%E8%AF%95%E7%9B%B8%E5%85%B3%E7%9A%84%E5%B7%A5%E4%BD%9C%EF%BC%8C%E5%8C%85%E6%8B%AC%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%81%E7%9A%84%E7%BC%96%E8%AF%91%EF%BC%8C%E6%89%A7%E8%A1%8Cprovided%20%E6%89%93%E5%8C%85%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AF%E4%BB%A5%E4%B8%8D%E7%94%A8%E5%8C%85%E8%BF%9B%E5%8E%BBsystem%20%E8%A2%AB%E4%BE%9D%E8%B5%96%E9%A1%B9%E4%B8%8D%E4%BC%9A%E4%BB%8Emaven%E4%BB%93%E5%BA%93%E6%8A%93%EF%BC%8C%E8%80%8C%E6%98%AF%E4%BB%8E%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%8B%BF%EF%BC%8C%E4%B8%80%E5%AE%9A%E9%9C%80%E8%A6%81%E9%85%8D%E5%90%88systemPath%E5%B1%9E%E6%80%A7%E4%BD%BF%E7%94%A8--%3E%0A%20%20%20%20%3Cscope%3Etest%3C%2Fscope%3E%0A%20%20%20%20%E4%BB%8E%E4%BE%9D%E8%B5%96%E6%9E%84%E4%BB%B6%E5%88%97%E8%A1%A8%E9%87%8C%EF%BC%8C%E5%88%97%E5%87%BA%E8%A2%AB%E6%8E%92%E9%99%A4%E7%9A%84%E4%BE%9D%E8%B5%96%E6%9E%84%E4%BB%B6%E9%9B%86%2C%E6%AD%A4%E5%85%83%E7%B4%A0%E4%B8%BB%E8%A6%81%E7%94%A8%E4%BA%8E%E8%A7%A3%E5%86%B3%E7%89%88%E6%9C%AC%E5%86%B2%E7%AA%81%E9%97%AE%E9%A2%98%20%20%20%20%20%20%20%0A%20%20%20%20%3Cexclusions%3E%0A%20%20%20%20%20%20%20%20%3Cexclusion%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-core%3C%2FartifactId%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework%3C%2FgroupId%3E%0A%20%20%20%20%20%20%20%20%3C%2Fexclusion%3E%0A%20%20%20%20%3C%2Fexclusions%3E%0A%3Cdependencies%2F%3E%0A%0A%60%60%60%0A%0A%23%23%23%23%20settings.xml%0A%0A1.%20MIrrors%0A*%20%E4%BD%BF%E7%94%A8%E9%95%9C%E5%83%8F%E7%9A%84%E4%B8%80%E4%BA%9B%E5%8E%9F%E5%9B%A0%EF%BC%9A%E4%BA%92%E8%81%94%E7%BD%91%E4%B8%8A%E6%9C%89%E4%B8%80%E4%B8%AA%E5%90%8C%E6%AD%A5%E9%95%9C%E5%83%8F%EF%BC%8C%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE%E6%9B%B4%E8%BF%91%EF%BC%8C%E9%80%9F%E5%BA%A6%E6%9B%B4%E5%BF%AB%0A*%20%E6%82%A8%E5%B8%8C%E6%9C%9B%E5%B0%86%E7%89%B9%E5%AE%9A%E5%AD%98%E5%82%A8%E5%BA%93%E6%9B%BF%E6%8D%A2%E4%B8%BA%E6%82%A8%E5%8F%AF%E4%BB%A5%E6%9B%B4%E5%A5%BD%E5%9C%B0%E6%8E%A7%E5%88%B6%E7%9A%84%E5%86%85%E9%83%A8%E5%AD%98%E5%82%A8%E5%BA%93%0A%60%60%60xml%0A%0A%3Cmirrors%3E%0A%20%20%20%20%3Cmirror%3E%0A%20%20%20%20%3C!--id%EF%BC%8Cname%EF%BC%9Aid%E5%BF%85%E9%A1%BB%E5%94%AF%E4%B8%80(%E4%B8%8D%E8%A6%81%E4%B8%8E%E4%BB%93%E5%BA%93id%E4%B8%80%E6%A0%B7)%EF%BC%8Cname%E9%9A%8F%E6%84%8F--%3E%0A%20%20%20%20%20%20%3Cid%3Eplanetmirror.com%3C%2Fid%3E%0A%20%20%20%20%20%20%3Cname%3EPlanetMirror%20Australia%3C%2Fname%3E%0A%20%20%20%20%20%20%3C!--url%EF%BC%9A%E9%95%9C%E5%83%8F%E7%9A%84%E5%9C%B0%E5%9D%80--%3E%0A%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2Fdownloads.planetmirror.com%2Fpub%2Fmaven2%3C%2Furl%3E%0A%20%20%20%20%20%20%3C!--mirrorOf%EF%BC%9A%E9%9C%80%E8%A6%81%E8%A2%AB%E9%95%9C%E5%83%8F%E7%9A%84%E4%BB%93%E5%BA%93id%E3%80%82%E4%BE%8B%E5%A6%82%EF%BC%8C%E8%A6%81%E6%8C%87%E5%90%91Maven%E4%B8%AD%E5%A4%AE%E5%AD%98%E5%82%A8%E5%BA%93%EF%BC%88https%3A%2F%2Frepo.maven.apache.org%2Fmaven2%2F%EF%BC%89%E7%9A%84%E9%95%9C%E5%83%8F%EF%BC%8C%E8%AF%B7%E5%B0%86%E6%AD%A4%E5%85%83%E7%B4%A0%E8%AE%BE%E7%BD%AE%E4%B8%BAcentral--%3E%0A%20%20%20%20%20%20%3CmirrorOf%3Ecentral%3C%2FmirrorOf%3E%0A%20%20%20%20%3C%2Fmirror%3E%0A%20%20%3C%2Fmirrors%3E%0A%0A%0A%60%60%60%0A%0A2.%20Profiles%0Asettings.xml%E4%B8%AD%E7%9A%84profile%E5%85%83%E7%B4%A0%E6%98%AFpom.xml%20profile%E5%85%83%E7%B4%A0%E7%9A%84%E7%B2%BE%E7%AE%80%E7%89%88%E6%9C%AC%E3%80%82%0A%E5%AE%83%E7%94%B1activation%EF%BC%8Crepositories%EF%BC%8CpluginRepositories%E5%92%8Cproperties%E5%85%83%E7%B4%A0%E7%BB%84%E6%88%90.%0A**%E5%A6%82%E6%9E%9Cprofile%E5%9C%A8settings.xml%E4%B8%AD%E8%A2%AB%E6%BF%80%E6%B4%BB%EF%BC%8C%E5%88%99%E5%85%B6%E5%80%BC%E5%B0%86%E8%A6%86%E7%9B%96POM%E6%88%96profiles.xml%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BB%BB%E4%BD%95%E7%AD%89%E6%95%88%E7%9A%84ID%E9%85%8D%E7%BD%AE%E3%80%82**%0A%60%60%60xml%0A%20%3Cprofile%3E%20%20%0A%20%20%20%20%20%3Cid%3EdownloadSources%3C%2Fid%3E%20%20%0A%20%20%20%20%3Cproperties%3E%20%20%0A%20%20%20%20%20%20%3CdownloadSources%3Etrue%3C%2FdownloadSources%3E%20%20%0A%20%20%20%20%20%20%3CdownloadJavadocs%3Etrue%3C%2FdownloadJavadocs%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%3C%2Fproperties%3E%20%20%0A%20%20%3C%2Fprofile%3E%20%20%0A%0A%60%60%60%0A%0A3.%20Repositories%0ARepositories%E6%98%AFMaven%E7%94%A8%E4%BA%8E%E5%A1%AB%E5%85%85%E6%9E%84%E5%BB%BA%E7%B3%BB%E7%BB%9F%E7%9A%84%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%BA%93%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%9A%84%E8%BF%9C%E7%A8%8B%E9%9B%86%E5%90%88%E3%80%82%E5%AE%83%E6%9D%A5%E8%87%AA%E8%BF%99%E4%B8%AA%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%BA%93%EF%BC%8CMaven%E7%A7%B0%E4%B9%8B%E4%B8%BA%E6%8F%92%E4%BB%B6%E5%92%8C%E4%BE%9D%E8%B5%96%E9%A1%B9%E3%80%82%E4%B8%8D%E5%90%8C%E7%9A%84%E8%BF%9C%E7%A8%8B%E5%AD%98%E5%82%A8%E5%BA%93%E5%8F%AF%E8%83%BD%E5%8C%85%E5%90%AB%E4%B8%8D%E5%90%8C%E7%9A%84%E9%A1%B9%E7%9B%AE%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%9C%A8%E5%90%AF%E7%94%A8%E7%9A%84profile%E4%B8%8B%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%90%9C%E7%B4%A2%E5%AE%83%E4%BB%AC%E4%BB%A5%E6%9F%A5%E6%89%BE%E5%8C%B9%E9%85%8D%E7%9A%84%E7%89%88%E6%9C%AC%E6%88%96%E5%BF%AB%E7%85%A7%E5%B7%A5%E4%BB%B6%E3%80%82%0A%0A4.%20Plugin%20Repositories%0ApluginRepositories%E5%85%83%E7%B4%A0%E5%9D%97%E7%9A%84%E7%BB%93%E6%9E%84%E7%B1%BB%E4%BC%BC%E4%BA%8Erepositories%E5%85%83%E7%B4%A0%E3%80%82%C2%A0pluginRepository%E5%85%83%E7%B4%A0%E6%8C%87%E5%AE%9AMaven%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%93%AA%E9%87%8C%E6%89%BE%E5%88%B0%E6%96%B0%E6%8F%92%E4%BB%B6%E7%9A%84%E8%BF%9C%E7%A8%8B%E4%BD%8D%E7%BD%AE%E3%80%82%0A%0A%60%60%60xml%0A%3Cprofile%3E%20%20%0A%20%20%20%20%20%20%3Cid%3Enexus_150%3C%2Fid%3E%20%20%0A%20%20%20%20%20%20%3Crepositories%3E%20%20%0A%20%20%20%20%20%20%20%20%3Crepository%3E%09%0A%20%20%20%20%20%20%20%20%20%20%3Cid%3Emaven-releases%3C%2Fid%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3Elocal%20private%20nexus%3C%2Fname%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F115.231.97.150%2Fnexus%2Frepository%2Freleases%2F%3C%2Furl%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Creleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Etrue%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Freleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Csnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Efalse%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fsnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%3C%2Frepository%3E%20%20%0A%20%20%20%20%20%20%20%20%3Crepository%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cid%3Emaven-snapshots%3C%2Fid%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3Elocal%20private%20nexus%3C%2Fname%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F115.231.97.150%2Fnexus%2Frepository%2Fmaven-snapshots%2F%3C%2Furl%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Creleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Efalse%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Freleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Csnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Etrue%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fsnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%3C%2Frepository%3E%0A%0A%3C!--%0A%20%20qcloud-oauth2-client-1.1.0%0A%0A--%3E%0A%3C!--%09%09%3Crepository%3E%0A%20%20%20%20%20%20%20%20%20%3Cid%3Ecci-snapshots%3C%2Fid%3E%0A%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F10.10.81.107%3A8080%2Fnexus%2Fcontent%2Frepositories%2Fsnapshots%2F%3C%2Furl%3E%0A%20%20%20%20%20%20%20%20%3C%2Frepository%3E%0A%20%20%20%20%20%20%20%20%3Crepository%3E%0A%20%20%20%20%20%20%20%20%20%3Cid%3Ecci-releases%3C%2Fid%3E%0A%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F10.10.81.107%3A8080%2Fnexus%2Fcontent%2Fgroups%2Fpublic%2F%3C%2Furl%3E%0A%20%20%20%20%20%20%20%20%3C%2Frepository%3E--%3E%0A%20%20%20%20%20%20%3C%2Frepositories%3E%20%20%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%3CpluginRepositories%3E%20%20%0A%20%20%20%20%20%20%20%20%3CpluginRepository%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cid%3Emaven-releases%3C%2Fid%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3Elocal%20private%20nexus%3C%2Fname%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F115.231.97.150%2Fnexus%2Frepository%2Freleases%2F%3C%2Furl%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Creleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Etrue%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Freleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Csnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Efalse%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fsnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%3C%2FpluginRepository%3E%20%20%0A%20%20%20%20%20%20%20%20%3CpluginRepository%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cid%3Emaven-snapshots%3C%2Fid%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3Elocal%20private%20nexus%3C%2Fname%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2F115.231.97.150%2Fnexus%2Frepository%2Fmaven-snapshots%2F%3C%2Furl%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Creleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Efalse%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Freleases%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3Csnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cenabled%3Etrue%3C%2Fenabled%3E%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fsnapshots%3E%20%20%0A%20%20%20%20%20%20%20%20%3C%2FpluginRepository%3E%20%20%0A%20%20%20%20%20%20%3C%2FpluginRepositories%3E%20%0A%20%20%20%20%3C%2Fprofile%3E%20%20%0A%60%60%60%0A%0A5.%20%E5%90%AF%E7%94%A8Profiles%0A%60%60%60xml%0A%20%20%3CactiveProfiles%3E%20%20%0A%20%20%3CactiveProfile%3Enexus_150%3C%2FactiveProfile%3E%0A%20%20%20%20%20%20%3C!--%20%20%20%20%3CactiveProfile%3EdownloadSources%3C%2FactiveProfile%3E%20%20%0A%20%20%20%20%20%20%20%20%3CactiveProfile%3Epublic-snapshots%3C%2FactiveProfile%3E%20%20%20--%3E%0A%20%20%3C%2FactiveProfiles%3E%20%0A%0A%60%60%60%0A%0A%23%23%20%E6%97%A5%E5%BF%97%E5%86%99%E6%B3%95%0A%0A%E4%BD%BF%E7%94%A8alibab%20Java%20Coding%20Guidelinec%E6%8F%92%E4%BB%B6%E8%A7%84%E8%8C%83%E4%BB%A3%E7%A0%81%0A1.%20%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%86%99%EF%BC%9F%0A---%20%E6%96%B9%E6%B3%95%E5%85%A5%E5%8F%A3%E5%A4%84(info)%0A---%E6%96%B9%E6%B3%95%E9%80%80%E5%87%BA%E5%89%8D(debug%2Cinfo)%0A----%E6%B5%81%E7%A8%8B%E5%88%86%E6%94%AF(info%2Cwarn)%0A----%E5%BC%82%E5%B8%B8%E5%88%86%E6%94%AF(error)%0A2.%20%E5%86%99%E7%9A%84%E5%86%85%E5%AE%B9%0A---%E5%85%A5%E5%8F%82(%E5%BF%85%E9%80%89)%0A---%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8(%E5%8F%AF%E9%80%89)%20debug%0A---%E8%BF%94%E5%9B%9E%E5%80%BC%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89%0A---%E4%B8%AD%E9%97%B4%E5%8F%98%E9%87%8F(%E5%8F%AF%E9%80%89)%0A3.%20%E5%86%99%E7%9A%84%E6%97%B6%E5%80%99%E5%9C%A8%E6%97%A5%E5%BF%97%E4%B8%AD%E5%8A%A0%E5%85%A5%E5%8F%AF%E4%BB%A5%E6%9F%A5%E8%AF%A2%E7%9A%84%E6%9D%A1%E4%BB%B6%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%88%86%E8%BE%A8%E6%90%9C%E7%B4%A2%EF%BC%8C%E5%A6%82%0A%60%60%60%0Alog.warn(%22%5B%E7%B3%BB%E7%BB%9F%E5%90%8D%20%E6%A8%A1%E5%9D%97%E5%90%8D%5D%20xxxxxx%22)%3B%0A%60%60%60%0A%0A%23%23%20%E5%B7%A5%E5%85%B7%E7%B1%BB%0A1.%20%E6%89%80%E6%9C%89%E7%9A%84%E5%8F%98%E9%87%8F%E5%92%8C%E6%96%B9%E6%B3%95%E9%83%BD%E6%98%AFstatic%0A2.%20%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E7%94%A8%E5%88%B0%E5%85%B6%E4%BB%96%E7%9A%84service%EF%BC%8C%E9%80%9A%E8%BF%87spring%E5%AE%B9%E5%99%A8%E5%8E%BB%E5%8F%96%0A%60%60%60java%0A%2F%2F%E9%9C%80%E8%A6%81%E5%BC%BA%E8%BD%AC%E7%B1%BB%E5%9E%8B%0A(xxxService)SpringContextUtils.getBean(%22xxxService%22)%3B%20%0A%60%60%60%0A%0A%23%23%20%E4%B8%9A%E5%8A%A1%E5%86%99%E6%B3%95%0A%0A%23%23%23%23%201.%20controller%0A%E6%8E%A5%E5%8F%97%E5%A4%9A%E4%B8%AA%E5%AF%B9%E8%B1%A1%E6%97%B6%EF%BC%8C%E5%BF%85%E9%A1%BB%E6%8A%8A%E5%A4%9A%E4%B8%AA%E5%AF%B9%E8%B1%A1%E5%B0%81%E8%A3%85%E6%88%90%E4%B8%80%E4%B8%AAVO%E7%B1%BB%E6%9D%A5%E6%8E%A5%E5%8F%97%0A%23%23%23%23%202.%20swagger%E6%B3%A8%E8%A7%A3%EF%BC%9A%0A%0A%7C%20%E4%BD%9C%E7%94%A8%E8%8C%83%E5%9B%B4%20%7C%09API%20%7C%20%E4%BD%BF%E7%94%A8%E4%BD%8D%E7%BD%AE%20%7C%0A%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%7C%E5%AF%B9%E8%B1%A1%E5%B1%9E%E6%80%A7%09%7C%40ApiModelProperty%09%7C%E7%94%A8%E5%9C%A8%E5%87%BA%E5%85%A5%E5%8F%82%E6%95%B0%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%AD%97%E6%AE%B5%E4%B8%8A%7C%0A%7C%E5%8D%8F%E8%AE%AE%E9%9B%86%E6%8F%8F%E8%BF%B0%09%7C%40Api%09%7C%E7%94%A8%E4%BA%8Econtroller%E7%B1%BB%E4%B8%8A%7C%0A%7C%E5%8D%8F%E8%AE%AE%E6%8F%8F%E8%BF%B0%09%7C%40ApiOperation%7C%09%E7%94%A8%E5%9C%A8controller%E7%9A%84%E6%96%B9%E6%B3%95%E4%B8%8A%7C%0A%7CResponse%E9%9B%86%09%7C%40ApiResponses%09%7C%E7%94%A8%E5%9C%A8controller%E7%9A%84%E6%96%B9%E6%B3%95%E4%B8%8A%7C%0A%7CResponse%7C%09%40ApiResponse%09%7C%E7%94%A8%E5%9C%A8%20%40ApiResponses%E9%87%8C%E8%BE%B9%7C%0A%7C%E9%9D%9E%E5%AF%B9%E8%B1%A1%E5%8F%82%E6%95%B0%E9%9B%86%09%7C%40ApiImplicitParams%09%7C%E7%94%A8%E5%9C%A8controller%E7%9A%84%E6%96%B9%E6%B3%95%E4%B8%8A%7C%0A%7C%E9%9D%9E%E5%AF%B9%E8%B1%A1%E5%8F%82%E6%95%B0%E6%8F%8F%E8%BF%B0%7C%09%40ApiImplicitParam%09%7C%E7%94%A8%E5%9C%A8%40ApiImplicitParams%E7%9A%84%E6%96%B9%E6%B3%95%E9%87%8C%E8%BE%B9%7C%0A%7C%E6%8F%8F%E8%BF%B0%E8%BF%94%E5%9B%9E%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%84%8F%E4%B9%89%09%7C%40ApiModel%09%7C%E7%94%A8%E5%9C%A8%E8%BF%94%E5%9B%9E%E5%AF%B9%E8%B1%A1%E7%B1%BB%E4%B8%8A%7C%0A%0A-%20-%20-%0A%40ApiImplicitParam%0A%7C%E5%B1%9E%E6%80%A7%7C%09%E5%8F%96%E5%80%BC%7C%09%E4%BD%9C%E7%94%A8%7C%0A%7C---%7C---%7C---%7C%0A%7CparamType%09%7C%7C%09%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%7C%0A%7C%7Cpath%09%7C%E4%BB%A5%E5%9C%B0%E5%9D%80%E7%9A%84%E5%BD%A2%E5%BC%8F%E6%8F%90%E4%BA%A4%E6%95%B0%E6%8D%AE%7C%0A%7C%7Cquery%7C%09%E7%9B%B4%E6%8E%A5%E8%B7%9F%E5%8F%82%E6%95%B0%E5%AE%8C%E6%88%90%E8%87%AA%E5%8A%A8%E6%98%A0%E5%B0%84%E8%B5%8B%E5%80%BC%7C%20%0A%7C%7Cbody%7C%09%E4%BB%A5%E6%B5%81%E7%9A%84%E5%BD%A2%E5%BC%8F%E6%8F%90%E4%BA%A4%20%E4%BB%85%E6%94%AF%E6%8C%81POST%0A%7C%7Cheader%7C%09%E5%8F%82%E6%95%B0%E5%9C%A8request%20headers%20%E9%87%8C%E8%BE%B9%E6%8F%90%E4%BA%A4%0A%7C%7Cform%7C%09%E4%BB%A5form%E8%A1%A8%E5%8D%95%E7%9A%84%E5%BD%A2%E5%BC%8F%E6%8F%90%E4%BA%A4%20%E4%BB%85%E6%94%AF%E6%8C%81POST%0A%7CdataType%09%7C%09%E5%8F%82%E6%95%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%20%7C%E5%8F%AA%E4%BD%9C%E4%B8%BA%E6%A0%87%E5%BF%97%E8%AF%B4%E6%98%8E%EF%BC%8C%E5%B9%B6%E6%B2%A1%E6%9C%89%E5%AE%9E%E9%99%85%E9%AA%8C%E8%AF%81%0A%7C%7CLong%09%7C%7C%0A%7C%7CString%09%7C%7C%0A%7Cname%09%7C%7C%09%E6%8E%A5%E6%94%B6%E5%8F%82%E6%95%B0%E5%90%8D%7C%0A%7Cvalue%09%7C%7C%09%E6%8E%A5%E6%94%B6%E5%8F%82%E6%95%B0%E7%9A%84%E6%84%8F%E4%B9%89%E6%8F%8F%E8%BF%B0%7C%0A%7Crequired%09%09%7C%7C%E5%8F%82%E6%95%B0%E6%98%AF%E5%90%A6%E5%BF%85%E5%A1%AB%7C%0A%7C%7Ctrue%7C%09%E5%BF%85%E5%A1%AB%7C%0A%7C%7Cfalse%7C%09%E9%9D%9E%E5%BF%85%E5%A1%AB%7C%0A%7CdefaultValue%09%7C%7C%09%E9%BB%98%E8%AE%A4%E5%80%BC%0A%0A%60%60%60java%0A%0A%40ApiImplicitParams(%7B%20%40ApiImplicitParam(paramType%20%3D%20%22body%22%2C%20dataType%20%3D%20%22MessageParam%22%2C%20%0Aname%20%3D%20%22param%22%2C%20value%20%3D%20%22%E4%BF%A1%E6%81%AF%E5%8F%82%E6%95%B0%22%2C%20required%20%3D%20true)%20%7D)%0A%0A%60%60%60%0A%0A%E5%9C%A8controller%E7%B1%BB%E4%B8%8A%0A%40Api(value%3D%22%E7%94%A8%E6%88%B7controller%22%2Ctags%3D%7B%22%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E6%8E%A5%E5%8F%A3%22%7D)%0A%0A%E5%9C%A8controller%E6%96%B9%E6%B3%95%E4%B8%8A%0A%40ApiOperation(value%3D%22%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%22%2Ctags%3D%7B%22%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AFcopy%22%7D)%0A%0A%E5%9C%A8%E5%AE%9E%E4%BD%93%E7%B1%BB%E4%B8%8A%0A%40ApiModel(value%3D%22user%E5%AF%B9%E8%B1%A1%22%2Cdescription%3D%22%E7%94%A8%E6%88%B7%E5%AF%B9%E8%B1%A1user%22)%0A%0A%E5%9C%A8%E5%AE%9E%E4%BD%93%E6%96%B9%E6%B3%95%E4%B8%8A%20%0A%40ApiModelProperty(value%3D%22%E7%94%A8%E6%88%B7%E5%90%8D%22%2Cname%3D%22username%22)%0A%0Aswagger%E4%BE%9D%E8%B5%96%EF%BC%9A%0A%60%60%60xml%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Eio.springfox%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Espringfox-swagger2%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E%24%7Bspringfox-swagger2.version%7D%3C%2Fversion%3E%0A%3C%2Fdependency%3E%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Eio.springfox%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Espringfox-swagger-ui%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E%24%7Bspringfox-swagger-ui.version%7D%3C%2Fversion%3E%0A%3C%2Fdependency%3E%0A%60%60%60%0A-%20-%20-%0A%0A1.%20Do%E7%B1%BB%E7%BB%A7%E6%89%BFModel%2C%E4%B8%8D%E5%86%99%E5%85%B6%E4%BB%96%E9%80%9A%E7%94%A8%E7%9A%84%E5%B1%9E%E6%80%A7%EF%BC%8C%E6%B3%A8%E9%87%8A%E5%B1%9E%E6%80%A7%E4%B8%AD%E6%96%87%E6%B3%A8%E9%87%8Alombak%EF%BC%8C%E4%B8%BB%E9%94%AE%E6%B3%A8%E8%A7%A3%40Id%0A%0A2.%20Dto%E7%B1%BB%E7%BB%A7%E6%89%BFBaseDto%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%86%99%E5%85%A5%E5%85%B6%E4%BB%96%E7%9A%84Do%E7%B1%BB%E4%BD%9C%E4%B8%BA%E5%B1%9E%E6%80%A7(%E6%9C%89%E5%85%B6%E4%BB%96%E5%B1%9E%E6%80%A7%EF%BC%8C%E9%9C%80%E6%B3%A8%E8%A7%A3lombak)%0A%0A3.%20Vo%E7%B1%BB%EF%BC%8C%E5%9C%A8controller%E9%87%8C%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8%E6%B3%A8%E8%A7%A3%40ApiModel%EF%BC%8C%40ApiModelProperty%EF%BC%8C%E6%B3%A8%E8%A7%A3lombak%0A%0A4.%20mapper%E6%8E%A5%E5%8F%A3%EF%BC%8C%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8Do%E7%B1%BB%EF%BC%8C%E5%8F%82%E6%95%B0%E5%90%8D%E4%B8%BArecord%EF%BC%8C%E6%B3%A8%E8%A7%A3%40Mapper%0A%0A5.%20Service%20%E6%8E%A5%E5%8F%97%E5%8F%82%E6%95%B0%E4%B8%BADto%2C%E4%BC%A0%E7%BB%99mapper%E7%9A%84%E5%8F%82%E6%95%B0%E4%B8%BADto.getRecord()%2C%E8%BF%94%E5%9B%9E%E7%B1%BB%E5%9E%8B%E4%B8%BASWrapper%0A%0A6.%20controller%20extends%20BaseController%E6%96%B9%E6%B3%95%E6%8E%A5%E5%8F%97%E5%8F%82%E6%95%B0Vo%EF%BC%8C%E4%BC%A0%E7%BB%99service%E7%9A%84%E4%B8%BADto%2C%E9%9C%80%E8%A6%81%E6%8A%8AVo%E8%BD%AC%E6%88%90Dto%E9%80%9A%E8%BF%87toDto(Vo%2COperateType)%E6%96%B9%E6%B3%95%20%E8%BF%94%E5%9B%9E%E7%B1%BB%E5%9E%8BRWrapper%0A%0A%0A%23%23%20%E6%89%93%E5%8C%85%0A%0A%23%23%23%23%201.%20jar%E5%8C%85%EF%BC%9A%0A%60%60%60xml%0A%3Cbuild%3E%0A%3C!--%20%E6%89%93%E6%88%90war%E4%B8%8D%E9%9C%80%E8%A6%81%E8%BF%99%E4%B8%AAmaven%E6%8F%92%E4%BB%B6%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%89%93%E6%88%90jar%E5%88%99%E6%98%AF%E5%BF%85%E9%A1%BB%E7%9A%84%20--%3E%0A%20%20%20%20%3Cplugins%3E%0A%20%20%20%20%20%20%20%20%3Cplugin%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Espring-boot-maven-plugin%3C%2FartifactId%3E%0A%20%20%20%20%20%20%20%20%3C%2Fplugin%3E%0A%20%20%20%20%3C%2Fplugins%3E%0A%20%20%20%20%3CfinalName%3Espringbootdemo%3C%2FfinalName%3E%0A%3C%2Fbuild%3E%0A%60%60%60%0Aspring-boot%20%E9%BB%98%E8%AE%A4%E6%8F%90%E4%BE%9B%E5%86%85%E5%B5%8C%E7%9A%84tomcat%EF%BC%8C%E6%89%80%E4%BB%A5%E6%89%93%E5%8C%85%E7%9B%B4%E6%8E%A5%E7%94%9F%E6%88%90jar%20%E5%8C%85%EF%BC%8C%E7%94%A8java%20-jar%20%E5%91%BD%E4%BB%A4%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%90%AF%E5%8A%A8%E3%80%82%0A%2F%2Fnohup%20%E6%84%8F%E6%80%9D%E6%98%AF%E4%B8%8D%E6%8C%82%E6%96%AD%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%2C%E5%BD%93%E8%B4%A6%E6%88%B7%E9%80%80%E5%87%BA%E6%88%96%E7%BB%88%E7%AB%AF%E5%85%B3%E9%97%AD%E6%97%B6%2C%E7%A8%8B%E5%BA%8F%E4%BB%8D%E7%84%B6%E8%BF%90%E8%A1%8C%0A%2F%2F%E5%BD%93%E7%94%A8%20nohup%20%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E4%BD%9C%E4%B8%9A%E6%97%B6%EF%BC%8C%E7%BC%BA%E7%9C%81%E6%83%85%E5%86%B5%E4%B8%8B%E8%AF%A5%E4%BD%9C%E4%B8%9A%E7%9A%84%E6%89%80%E6%9C%89%E8%BE%93%E5%87%BA%E8%A2%AB%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0nohup.out%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%0A%60nohup%20java%20-jar%20test.jar%20%3Etemp.txt%20%26%60%0A%0ASpring%E7%A8%8B%E5%BA%8F%E4%BC%9A%E6%8C%89%E4%BC%98%E5%85%88%E7%BA%A7%E4%BB%8E%E4%B8%8B%E9%9D%A2%E8%BF%99%E4%BA%9B%E8%B7%AF%E5%BE%84%E6%9D%A5%E5%8A%A0%E8%BD%BDapplication.properties%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%0A*%20%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%2Fconfig%E7%9B%AE%E5%BD%95%0A*%20%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%0A*%20classpath%E9%87%8C%E7%9A%84%2Fconfig%E7%9B%AE%E5%BD%95%0A*%20classpath%20%E8%B7%9F%E7%9B%AE%E5%BD%95%0A%0A%60nohup%20java%20-jar%20-Dspring.config.location%3DD%3A%5Cconfig%5Cconfig.properties%20xxx.jar%3E%20%2Fxx%2Fnohup.out%202%3E%261%20%26%60%0A%0A%23%23%23%23%202.%20war%E5%8C%85%EF%BC%9A%0A%E6%9C%89%E6%97%B6%E5%80%99%E6%88%91%E4%BB%AC%E6%9B%B4%E5%B8%8C%E6%9C%9B%E4%B8%80%E4%B8%AAtomcat%20%E6%9D%A5%E7%AE%A1%E7%90%86%E5%A4%9A%E4%B8%AA%E9%A1%B9%E7%9B%AE%EF%BC%8C%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%E5%B0%B1%E9%9C%80%E8%A6%81%E9%A1%B9%E7%9B%AE%E6%98%AFwar%20%E6%A0%BC%E5%BC%8F%E7%9A%84%E3%80%82%0A%60%60%60xml%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Eorg.springframework.boot%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Espring-boot-starter-tomcat%3C%2FartifactId%3E%0A%20%20%20%20%3Cscope%3Eprovided%3C%2Fscope%3E%0A%3C%2Fdependency%3E%0A%60%60%60%0Aspring-boot-starter-tomcat%20%E6%98%AF%E5%8E%9F%E6%9D%A5%E8%A2%AB%E4%BC%A0%E9%80%92%E8%BF%87%E6%9D%A5%E7%9A%84%E4%BE%9D%E8%B5%96%EF%BC%8C%E9%BB%98%E8%AE%A4%E4%BC%9A%E6%89%93%E5%88%B0%E5%8C%85%E9%87%8C%EF%BC%8C%E6%89%80%E4%BB%A5%E6%88%91%E4%BB%AC%E5%86%8D%E6%AC%A1%E5%BC%95%E5%85%A5%E6%AD%A4%E4%BE%9D%E8%B5%96%EF%BC%8C%E5%B9%B6%E6%8C%87%E5%AE%9A%E4%BE%9D%E8%B5%96%E8%8C%83%E5%9B%B4%E4%B8%BAprovided%EF%BC%8C%E8%BF%99%E6%A0%B7tomcat%20%E7%9B%B8%E5%85%B3%E7%9A%84jar%E5%B0%B1%E4%B8%8D%E4%BC%9A%E6%89%93%E5%8C%85%E5%88%B0war%20%E9%87%8C%E4%BA%86%0A%0A%E6%B7%BB%E5%8A%A0ServletInitializer%E5%B0%86%E9%A1%B9%E7%9B%AE%E6%89%93%E6%88%90war%E5%8C%85%EF%BC%8C%E9%83%A8%E7%BD%B2%E5%88%B0%E5%A4%96%E9%83%A8%E7%9A%84tomcat%E4%B8%AD%EF%BC%8C%E8%BF%99%E4%B8%AA%E6%97%B6%E5%80%99%EF%BC%8C%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AEspring%20boot%20%E9%A1%B9%E7%9B%AE%E4%B8%AD%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE%E7%9A%84%E7%AB%AF%E5%8F%A3%E3%80%82%0A%0Aapplication.yml%E4%B8%AD%E9%85%8D%E7%BD%AE%E7%9A%84server.port%E9%85%8D%E7%BD%AE%E7%9A%84%E6%98%AFspring%20boot%E5%86%85%E7%BD%AE%E7%9A%84tomcat%E7%9A%84%E7%AB%AF%E5%8F%A3%E5%8F%B7%2C%20**%E6%89%93%E6%88%90war%E5%8C%85%E9%83%A8%E7%BD%B2%E5%9C%A8%E7%8B%AC%E7%AB%8B%E7%9A%84tomcat%E4%B8%8A%E4%B9%8B%E5%90%8E%2C%20%E4%BD%A0%E9%85%8D%E7%BD%AE%E7%9A%84server.port%E6%98%AF%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E7%9A%84**%E3%80%82%0A%0A%23%23%23%23%203.%20assembly%E6%8F%92%E4%BB%B6%0A%0A%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81Assembly%E6%8F%92%E4%BB%B6%E5%91%A2%EF%BC%9F%E5%9B%A0%E4%B8%BA%E5%AF%B9%E4%BA%8E**%E6%9C%8D%E5%8A%A1%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%90%8E%E5%8F%B0%E7%A8%8B%E5%BA%8F**%EF%BC%8C%E7%BA%BF%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%97%B6%E4%B8%80%E8%88%AC%E9%80%9A%E8%BF%87%E8%84%9A%E6%9C%AC%E7%9A%84%E6%96%B9%E5%BC%8F%E5%90%AF%E5%8A%A8%E5%92%8C%E5%81%9C%E6%AD%A2%EF%BC%8C%E8%80%8C%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E5%A4%8D%E6%9D%82%E4%B8%94%E4%B8%8D%E5%A4%9F%E7%9B%B4%E8%A7%82%EF%BC%8C%E4%B8%94**%E9%A1%B9%E7%9B%AE%E6%96%87%E4%BB%B6%E4%B9%9F%E9%9C%80%E8%A6%81%E5%90%88%E5%B9%B6%E5%92%8C%E8%BF%87%E6%BB%A4**%EF%BC%8CAssembly%E6%8F%92%E4%BB%B6%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%B8%AE%E5%8A%A9%E6%88%91%E4%BB%AC%E5%AE%8C%E6%88%90%E3%80%82%0A%0A%0A%E6%AF%94%E5%A6%82%E7%8E%B0%E5%9C%A8%E6%88%91%E4%BB%AC%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%9B%AE%E5%BD%95%E5%A6%82%E4%B8%8B%EF%BC%9A%0A%60%60%60%0A%2B%20src%20%0A%20%20%20%20%2B%20main%20%0A%20%20%20%20%20%20%20%20%2B%20java%20%0A%20%20%20%20%20%20%20%20%2B%20resources%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2B%20jdbc.properties%20%0A%20%20%20%20%20%20%20%20%2B%20bin%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2B%20start.sh%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2B%20stop.sh%20%0A%20%20%20%20%20%20%20%20%2B%20assembly%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2B%20assembly.xml%0A%60%60%60%0A%0A%E6%9C%80%E7%BB%88%E6%83%B3%E8%A6%81%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%9A%0A%60%60%60%0A%2B%20bin%20%0A%20%20%20%20start.sh%20%0A%20%20%20%20stop.sh%20%0A%2B%20conf%0A%20%20%20%20jdbc.properties%20%0A%2B%20lib(%E4%BE%9D%E8%B5%96jar%E5%8C%85%E7%9B%AE%E5%BD%95)%20%0A%20%20%20%20xxx.jar%0A%60%60%60%0A%0A%0A%23%23%20%E5%88%86%E9%A1%B5%0A%0A1.%20%E4%BE%9D%E8%B5%96%0A%60%60%60xml%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Eorg.springframework.data%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Espring-data-commons%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E2.1.8.RELEASE%3C%2Fversion%3E%0A%3C%2Fdependency%3E%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Ecom.github.pagehelper%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Epagehelper-spring-boot-starter%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E1.2.12%3C%2Fversion%3E%0A%3C%2Fdependency%3E%0A%60%60%60%0A2.%E5%88%86%E9%A1%B5%E5%B0%81%E8%A3%85%E5%B7%A5%E5%85%B7%E7%B1%BB%0A%60%60%60java%0Apublic%20class%20PageInfoAdapter%3CT%3E%20extends%20PageImpl%3CT%3E%20%7B%0Apublic%20PageInfoAdapter(Page%3CT%3E%20page)%20%7B%0Asuper(page.getResult()%2C%20PageRequest.of(page.getPageNum()%20-%201%2C%20page.getPageSize())%2C%20page.getTotal())%3B%0A%7D%0A%7D%0A%60%60%60%0A3.%20controller%0A%60%60%60java%0Apublic%20RWrapper%20listTaskPlan(Pageable%20pageable%2CTaskPlan%20taskPlan)%0A%7B%0Areturn%20new%20RWrapper(taskPlanService.listTaskPlan(pageable%2CtaskPlan))%3B%0A%7D%0A%60%60%60%0A4.%20servicepublic%20%0A%60%60%60java%0APage%3CMap%3CString%2C%20Object%3E%3E%20listTaskPlan(Pageable%20pageable%2C%20TaskPlan%20taskPlan)%20%0A%7B%0A%20%20%20%20com.github.pagehelper.Page%3CMap%3CString%2C%20Object%3E%3E%20pageInfo%20%3D%20%20PageHelper.startPage(pageable.getPageNumber()%2Cpageable.getPageSize())%0A.doSelectPage(()%20-%3E%20%20taskPlanQueryMapper.listTaskPlan(taskPlan))%3B%0A%20%20%20%20return%20new%20PageInfoAdapter(pageInfo)%3B%0A%7D%0A%0A%60%60%60%0A%0A%23%23%20mybatis%0A%0A1.%20mybatis%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B%0AgeneratorConfig.xml%E6%96%87%E4%BB%B6%E9%9C%80%E8%A6%81%E5%8A%A0%E4%B8%8A%E4%B8%8D%E7%94%9F%E6%88%90%E6%B3%A8%E9%87%8A%20%0A%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E7%94%9F%E6%88%90%E6%96%87%E4%BB%B6%E4%BE%9D%E8%B5%96%0A%60%60%60xml%0A%3Cplugin%3E%0A%20%20%20%20%3CgroupId%3Eorg.mybatis.generator%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Emybatis-generator-maven-plugin%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E1.3.5%3C%2Fversion%3E%0A%20%20%20%20%3Cconfiguration%3E%20%20%20%20%20%0A%20%20%3CconfigurationFile%3Esrc%2Fmain%2Fresources%2Fmybatis%2FgeneratorConfig.xml%0A%20%20%3C%2FconfigurationFile%3E%0A%20%20%20%20%3Cverbose%3Etrue%3C%2Fverbose%3E%0A%20%20%20%20%3Coverwrite%3Etrue%3C%2Foverwrite%3E%0A%20%20%20%20%3C%2Fconfiguration%3E%0A%3C%2Fplugin%3E%0A%0A%3Cdependency%3E%0A%20%20%20%20%3CgroupId%3Eorg.mybatis.generator%3C%2FgroupId%3E%0A%20%20%20%20%3CartifactId%3Emybatis-generator-core%3C%2FartifactId%3E%0A%20%20%20%20%3Cversion%3E1.3.5%3C%2Fversion%3E%0A%20%20%20%20%3Cscope%3Eprovided%3C%2Fscope%3E%0A%3C%2Fdependency%3E%0A%60%60%60%0A%0A%23%23%20response%2Frequest%0A1.%20%E7%BB%99%E5%89%8D%E7%AB%AF%E8%BF%94%E5%9B%9Ejson%E6%A0%BC%E5%BC%8F%E6%95%B0%E6%8D%AE%0A%60%60%60java%0AString%20json%20%3D%20JsonUtil.bean2Json(object)%3B%0A%0Aresponse.setCharacterEncoding(%22utf-8%22)%3B%0A%0Aresponse.setContentType(%22application%2Fjson%3B%20charset%3Dutf-8%22)%3B%0A%0APrintWriter%20writer%20%3D%20response.getWriter()%3B%0A%0Awriter.write(json)%3B%0A%0A%60%60%60%0A2.%20%E5%8F%96%E5%BE%97request%E8%AF%B7%E6%B1%82%E5%9C%B0%E5%9D%80%0A%60%60%60java%0AreferUri%20%3D%20request.getScheme()%20%2B%20%22%3A%2F%2F%22%20%2B%20request.getServerName()%20%0A%2B%20%22%3A%22%20%2B%20request.getServerPort()%20%2B%20request.getServletPath()%3B%0A%0Aif%20(request.getQueryString()%20!%3D%20null)%20%0A%7B%C2%A0%C2%A0%0A%20%20%20%20referUri%20%2B%3D%20%22%3F%22%20%2B%20request.getQueryString()%3B%0A%7D%0A%60%60%60