com.itxiaoer.dis:dis-core

Demo project for Spring Boot

License

License

GroupId

GroupId

com.itxiaoer.dis
ArtifactId

ArtifactId

dis-core
Last Version

Last Version

1.0.5
Release Date

Release Date

Type

Type

jar
Description

Description

Demo project for Spring Boot

Download dis-core

How to add to project

<!-- https://jarcasting.com/artifacts/com.itxiaoer.dis/dis-core/ -->
<dependency>
    <groupId>com.itxiaoer.dis</groupId>
    <artifactId>dis-core</artifactId>
    <version>1.0.5</version>
</dependency>
// https://jarcasting.com/artifacts/com.itxiaoer.dis/dis-core/
implementation 'com.itxiaoer.dis:dis-core:1.0.5'
// https://jarcasting.com/artifacts/com.itxiaoer.dis/dis-core/
implementation ("com.itxiaoer.dis:dis-core:1.0.5")
'com.itxiaoer.dis:dis-core:jar:1.0.5'
<dependency org="com.itxiaoer.dis" name="dis-core" rev="1.0.5">
  <artifact name="dis-core" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.itxiaoer.dis', module='dis-core', version='1.0.5')
)
libraryDependencies += "com.itxiaoer.dis" % "dis-core" % "1.0.5"
[com.itxiaoer.dis/dis-core "1.0.5"]

Dependencies

compile (7)

Group / Artifact Type Version
org.springframework.boot : spring-boot-starter-aop jar
com.itxiaoer.dis : dis-commons jar 1.0.5
com.itxiaoer.dis : dis-store jar 1.0.5
org.jooq : joor-java-8 jar 0.9.7
org.apache.commons : commons-lang3 jar 3.8
org.projectlombok : lombok Optional jar
org.springframework.boot : spring-boot-autoconfigure jar

Project Modules

There are no modules declared in this project.

dis(Distributed Idempotence Structure)

项目介绍

基于Spring Boot + Redis幂等性框架

执行流程

在编写中

如何使用

引入jar包

<dependency>
    <groupId>com.itxiaoer.dis</groupId>
    <artifactId>dis-core</artifactId>
    <version>1.0.0</version>
</dependency>

定义返回值类型(必须)

  • 因需要判断业务系统执行是否成功,通过DisResponse的方法isSuccess来判断。
package com.itxiaoer.dis.sample.web;

import com.itxiaoer.dis.commons.Responsive;
import lombok.Data;

import java.util.Objects;

/**
 * @author : liuyk
 */
@Data
public class MyResponse<T> implements Responsive{

    private boolean success;

    @Override
    public boolean isSuccess() {
        return success;
    }

}

完整例子见dis-sample

编写请求

  • 简单参数
package com.itxiaoer.dis.sample.web;

import com.itxiaoer.dis.commons.annotation.Dis;
import com.itxiaoer.dis.commons.annotation.DisInclude;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author : liuyk
 */
@RestController
public class SampleController {

    @Dis(expireTime = 1000)
    @GetMapping("/sample")
    public MyResponse<String> create1(@DisInclude String name, @DisInclude String id, @DisInclude Map<String, String> params) {
        System.out.println("hello " + name);
        return MyResponse.success("hello !" + name);
    }
}
  • 自定义对象
package com.itxiaoer.dis.sample.web;

import com.itxiaoer.dis.commons.Dis;
import lombok.Data;

/**
 * @author : liuyk
 */
@Data
public class ParamsDto implements Dis {
    private String id;
    private String name;

    @Override
    public String dis() {
        return id + name;
    }
}
package com.itxiaoer.dis.sample.web;

import com.itxiaoer.dis.commons.annotation.Dis;
import com.itxiaoer.dis.commons.annotation.DisInclude;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author : liuyk
 */
@RestController
public class SampleController {

    @Dis(expireTime = 1000)
    @GetMapping("/sample1")
    public MyResponse<String> create2(@DisInclude ParamsDto paramsDto, @DisInclude String age) {
        System.out.println("hello " + paramsDto.getName());
        return MyResponse.success("hello !" + paramsDto.getName());
    }
}

配置 application.yml

spring:
  redis:
    host: 127.0.0.1
  dis:
    store:
      type: redis
    active: true
    appId: dis-sample

全局异常处理

有重复请求目前采用抛出异常方式,所以需要业务自己处理

package com.itxiaoer.dis.sample.web;

import com.itxiaoer.dis.commons.exception.DisException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author : liuyk
 */
@Slf4j
@ControllerAdvice
public class ExceptionAdvice {


    @ResponseBody
    @ExceptionHandler({DisException.class})
    public <T> MyResponse<T> handleDisException(DisException e) {
        return MyResponse.fail(e.getMessage());
    }
}

参数说明

  • 启动参数
名称 说明
spring.dis.active true|false 是否启用dis
spring.dis.appId 应用唯一名称 在微服务架构下,防止请求参数相同
spring.dis.store.type 使用存储的类型 redis,目前只支持redis
  • 业务参数
名称 说明
expireTime 执行业务方法的有效时间 再请求参数一致情况下,该方法多长时间不可重复

注解说明

  • @Dis 标注该方法是否要求幂等
  • @DisInclude 标注该参数为幂等内容的一部份

接口

  • Dis 实现Dis接口,并重写dis方法,该方法提供该操作唯一性的内容特性

License

The project is licensed under the Apache 2 license

Versions

Version
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0