0%

引入依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("Demo API Doc")
                .description("This is a restful api document of Demo.")
                .version("1.0")
                .build();
    }
}

访问UI

常用注解:

  • @Api()用于类;
    表示标识这个类是swagger的资源
  • @ApiOperation()用于方法;
    表示一个http请求的操作
    - @ApiParam()用于方法,参数,字段说明;
    表示对参数的添加元数据(说明或是否必填等)
    - @ApiModel()用于类
    表示对类进行说明,用于参数用实体类接收
  • @ApiModelProperty()用于方法,字段
    表示对model属性的说明或者数据操作更改
  • @ApiIgnore()用于类,方法,方法参数
    表示这个方法或者类被忽略
  • @ApiImplicitParam() 用于方法
    表示单独的请求参数
  • @ApiImplicitParams()用于方法,包含多个 @ApiImplicitParam

示例

@RestController
@RequestMapping("/xxtest")
@Api(tags = "这里修改大类的名字", description = "这里修改大类的描述")
public class SysRoleController {

    @ApiImplicitParams({
        @ApiImplicitParam(name = "Authorization", value = "请求Header的名称", required = true, dataType = "String",paramType = "header"),
    })
    @ApiOperation(value = "修改接口的描述")
    @PostMapping("/test")
    public Response add(@RequestParam(value = "name") @ApiParam(value = "这里写参数名字") String name) {
        return roleService.add(name);
    }

    @ApiImplicitParams({
        @ApiImplicitParam(name = "Authorization", value = "认证Token", required = true, dataType = "String",paramType = "header"),
        @ApiImplicitParam(name = "name", value = "也可以在这里写参数的名称", dataType = "integer",paramType = "query"),
    })
    @ApiOperation(value = "修改接口的描述")
    @PostMapping("/test")
    public Response add(@RequestParam(value = "name") String name) {
        return roleService.add(name);
    }
}

@ApiModel(description = "测试实体")
public class TestEntity {
    @ApiModelProperty(value = "名称")
    private String name;
    @ApiModelProperty(value = "ID")
    private Integer id;
}

// influxdb客户端超时是由于http超时导致.
// 1. 声明 OkHttpClient 设置超时时间
static OkHttpClient.Builder build = new OkHttpClient.Builder()
            .readTimeout(20, TimeUnit.SECONDS);

// 2. 
InfluxDB influxDB = InfluxDBFactory.connect("http://127.0.0.1:8086", build);

  • 创建一个能运行docker命令的基础镜像
FROM hub.deri.org.cn/library/openjdk:8-jdk-alpine
MAINTAINER wuzhiyong Docker Maintainers "wuzhiyong@deri.energy"
RUN echo "Asia/shanghai" > /etc/timezone
RUN apk add docker
ENV LANG C.UTF-8
  • 创建java镜像
FROM hub.deri.org.cn/library/openjdk:8-jdk-alpine-docker
MAINTAINER wuzhiyong Docker Maintainers "wuzhiyong@deri.energy"
ADD route-1.0.0-SNAPSHOT.jar /root
EXPOSE 8080
ENV LANG C.UTF-8
CMD cd /root  && java -jar route-1.0.0-SNAPSHOT.jar
  • 启动容器必须携带的
 -v /var/run/docker.sock:/var/run/docker.sock

这样启动起来的java容器内,可以直接执行docker命令,如docker ps获取宿主机所有运行的容器列表.

redis连接配置:

 @Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    return container;
}

消息监听器:

@Component
public class RedisCallBack extends KeyExpirationEventMessageListener {

    public RedisCallBack(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println("过期key:" + message.toString());
    }
}

<div>
    <label class="radio-inline">
        <input type="radio" name="expire" th:value="1" th:checked="true"/>6小时
    </label>
    <label class="radio-inline">
        <input type="radio" name="expire" th:value="2"/>12小时
    </label>
    <label class="radio-inline">
        <input type="radio" name="expire" th:value="3"/>1天
    </label>
    <label class="radio-inline">
        <input type="radio" name="expire" th:value="4"/>3天
    </label>
    <label class="radio-inline">
        <input type="radio" name="expire" th:value="5"/>7天
    </label>
</div>

表单提交时如何获取用户选中了哪个单选框呢?

var expire = $("input[name='expire']:checked").val();

问题

如何在点击进入Modal后将表格数据传入?

方法一

<a class="btn btn-info btn-xs" th:data-port="${port.port}" data-toggle="modal" onclick="showDialog(this)">配置</a>
function showDialog(obj) {
    $('#myModal').modal('show');
    // 获取表格所在行的数据
    var tds = $(obj).parent().parent().find('td');
    // eq(0)获取第1列的数据传入ID为port输入框中
    $("#port").val($(tds.eq(0)).text());
}

方法二

<a class="btn btn-info btn-xs" th:data-port="${port.port}" data-toggle="modal" data-target="#myModal">配置</a>
$(function () { $('#myModal').on('show.bs.modal', function (e) {
        var btn = $(e.relatedTarget);
        // 获取data-port数据
        port = btn.data("port");
        document.getElementById("port").value=port;
    })
    });