From 3009d657d0dba05795f0c9619c3aae8fab5fd52d Mon Sep 17 00:00:00 2001 From: wangkang Date: Thu, 3 Aug 2017 14:45:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0spring=20boot=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 + .../org/itkk/udf/core/BaseApplication.java | 11 - udf-starter-cors/pom.xml | 41 +- udf-starter-id/.checkstyle | 7 + udf-starter-id/.gitignore | 4 + udf-starter-id/pom.xml | 23 + .../main/java/org/itkk/udf/id}/IdWorker.java | 532 ++++++++++-------- .../java/org/itkk/udf/id/IdWorkerConfig.java | 29 + .../org/itkk/udf/id/IdWorkerProperties.java | 40 ++ .../itkk/udf/id/web/IIdWorkerController.java | 59 ++ .../itkk/udf/id/web/IdWorkerController.java | 45 ++ 11 files changed, 517 insertions(+), 281 deletions(-) create mode 100644 udf-starter-id/.checkstyle create mode 100644 udf-starter-id/.gitignore create mode 100644 udf-starter-id/pom.xml rename {udf-starter-core/src/main/java/org/itkk/udf/core => udf-starter-id/src/main/java/org/itkk/udf/id}/IdWorker.java (84%) create mode 100644 udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerConfig.java create mode 100644 udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerProperties.java create mode 100644 udf-starter-id/src/main/java/org/itkk/udf/id/web/IIdWorkerController.java create mode 100644 udf-starter-id/src/main/java/org/itkk/udf/id/web/IdWorkerController.java diff --git a/pom.xml b/pom.xml index 5374f4e..ac7f8ef 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ udf-starter-mail udf-starter-scheduler udf-starter-scheduler-client + udf-starter-id @@ -101,6 +102,12 @@ udf-starter-scheduler-client ${udf-starter.version} + + + org.itkk.udf + udf-starter-id + ${udf-starter.version} + diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java b/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java index 6b23433..e4ceb23 100644 --- a/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java +++ b/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java @@ -83,15 +83,4 @@ public class BaseApplication { requestFactory.setBufferRequestBody(applicationConfig.getBufferRequestBody()); return requestFactory; } - - /** - * 描述 : 分布式ID生成器 - * - * @return 分布式ID生成器 - */ - @Bean - public IdWorker idWorker() { - return new IdWorker(); - } - } diff --git a/udf-starter-cors/pom.xml b/udf-starter-cors/pom.xml index cbb3d25..ff5e1ac 100644 --- a/udf-starter-cors/pom.xml +++ b/udf-starter-cors/pom.xml @@ -1,24 +1,23 @@ - 4.0.0 - - udf-starter-cors - udf-starter-cors - jar - http://www.egridcloud.com - - - org.itkk.udf - udf-starter - 1.0 - - - - - - org.itkk.udf - udf-starter-core - - + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + 4.0.0 + + udf-starter-cors + udf-starter-cors + jar + http://www.egridcloud.com + + + org.itkk.udf + udf-starter + 1.0 + + + + + org.itkk.udf + udf-starter-core + + diff --git a/udf-starter-id/.checkstyle b/udf-starter-id/.checkstyle new file mode 100644 index 0000000..7589bde --- /dev/null +++ b/udf-starter-id/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/udf-starter-id/.gitignore b/udf-starter-id/.gitignore new file mode 100644 index 0000000..c541155 --- /dev/null +++ b/udf-starter-id/.gitignore @@ -0,0 +1,4 @@ +/target/ +/bin/ +/.classpath +/.project diff --git a/udf-starter-id/pom.xml b/udf-starter-id/pom.xml new file mode 100644 index 0000000..507e825 --- /dev/null +++ b/udf-starter-id/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + udf-starter-id + udf-starter-id + jar + http://www.egridcloud.com + + + org.itkk.udf + udf-starter + 1.0 + + + + + org.itkk.udf + udf-starter-core + + + diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/IdWorker.java b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java similarity index 84% rename from udf-starter-core/src/main/java/org/itkk/udf/core/IdWorker.java rename to udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java index 4b52149..79a5d98 100644 --- a/udf-starter-core/src/main/java/org/itkk/udf/core/IdWorker.java +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java @@ -1,249 +1,283 @@ -/** - * IdWorker.java - * Created at 2016-11-01 - * Created by wangkang - * Copyright (C) 2016 itkk.org, All rights reserved. - */ -package org.itkk.udf.core; - -import org.itkk.udf.core.exception.SystemRuntimeException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.util.UUID; - -/** - * 描述 : 分布式id生成器,基于twiter的snowflake - * - * @author wangkang - */ -public class IdWorker { - - /** - * 描述 : 日志 - */ - private static final Logger LOGGER = LoggerFactory.getLogger(IdWorker.class); - - /** - * 描述 : 机器ID - */ - private long workerId; - - /** - * 描述 : 数据中心ID - */ - private long datacenterId; - - /** - * 描述 : 并发控制 - */ - private long sequence = 0L; - - /** - * 描述 : 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动) - */ - private long twepoch = 1288834974657L; - - /** - * 描述 : 机器标识位数 - */ - private long workerIdBits = 5L; - - /** - * 描述 : 数据中心标识位数 - */ - private long datacenterIdBits = 5L; - - /** - * 描述 : 机器ID最大值 - */ - private long maxWorkerId = -1L ^ (-1L << workerIdBits); - - /** - * 描述 : 数据中心ID最大值 - */ - private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); - - /** - * 描述 : 毫秒内自增位 - */ - private long sequenceBits = 12L; - - /** - * 描述 : 机器ID偏左移12位 - */ - private long workerIdShift = sequenceBits; - - /** - * 描述 : 数据中心ID左移17位 - */ - private long datacenterIdShift = sequenceBits + workerIdBits; - - /** - * 描述 : 时间毫秒左移22位 - */ - private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; - - /** - * 描述 : sequenceMask - */ - private long sequenceMask = -1L ^ (-1L << sequenceBits); - - /** - * 描述 : 上次生产id时间戳 - */ - private long lastTimestamp = -1L; - - /** - * 描述 : 构造函数 - */ - public IdWorker() { - this.datacenterId = getDatacenterId(maxDatacenterId); - this.workerId = getWorkerId(maxWorkerId); - LOGGER.info("datacenterId:{},workerId:{}", this.datacenterId, this.workerId); - } - - /** - * 描述 : 构造函数 - * - * @param workerId workerId - * @param datacenterId datacenterId - */ - public IdWorker(long workerId, long datacenterId) { - // sanity check for workerId - if (workerId > maxWorkerId || workerId < 0) { - throw new IllegalArgumentException( - String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); - } - if (datacenterId > maxDatacenterId || datacenterId < 0) { - throw new IllegalArgumentException( - String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); - } - this.workerId = workerId; - this.datacenterId = datacenterId; - LOGGER.info("datacenterId:{},workerId:{}", maxDatacenterId, maxWorkerId); - } - - /** - * 描述 : 下一个ID - * - * @return ID - */ - public synchronized long nextId() { - long timestamp = timeGen(); - if (timestamp < lastTimestamp) { - throw new SystemRuntimeException( - String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", - lastTimestamp - timestamp)); - } - if (lastTimestamp == timestamp) { - sequence = (sequence + 1) & sequenceMask; - if (sequence == 0) { - timestamp = tilNextMillis(lastTimestamp); - } - } else { - sequence = 0L; - } - lastTimestamp = timestamp; - return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) - | (workerId << workerIdShift) | sequence; - } - - /** - * 描述 : 获得下一个毫秒数 - * - * @param lastTimestampParam lastTimestampParam - * @return 下一个毫秒数 - */ - protected long tilNextMillis(long lastTimestampParam) { - long timestamp = timeGen(); - while (timestamp <= lastTimestampParam) { - timestamp = timeGen(); - } - return timestamp; - } - - /** - * 描述 : 获得当前时间毫秒数 - * - * @return 当前时间毫秒数 - */ - protected long timeGen() { - return System.currentTimeMillis(); - } - - /** - * 描述 : 获取机器ID - * - * @param maxWorkerIdparam maxWorkerIdparam - * @return 机器ID - */ - protected long getWorkerId(long maxWorkerIdparam) { - return Math.abs(UUID.randomUUID().toString().hashCode() % maxWorkerIdparam); - } - - /** - * 描述 : 获取数据中心ID - * - * @param maxDatacenterIdparam maxDatacenterIdparam - * @return 数据中心ID - */ - protected long getDatacenterId(long maxDatacenterIdparam) { - return Math.abs(UUID.randomUUID().toString().hashCode() % maxDatacenterIdparam); - } - - /** - * 描述 : 获取机器ID(备用,docker容器中有问题) - * - * @param datacenterIdparam datacenterIdparam - * @param maxWorkerIdparam maxWorkerIdparam - * @return 机器ID - */ - protected long getWorkerIdBack(long datacenterIdparam, long maxWorkerIdparam) { - final int numbera = 0xffff; - StringBuilder mpid = new StringBuilder(); - mpid.append(datacenterIdparam); - String name = ManagementFactory.getRuntimeMXBean().getName(); - if (!name.isEmpty()) { - //GET jvmPid - mpid.append(name.split("@")[0]); - } - //MAC + PID 的 hashcode 获取16个低位 - return (mpid.toString().hashCode() & numbera) % (maxWorkerIdparam + 1); - } - - /** - * 描述 : 获取数据中心ID(备用,docker容器中有问题) - * - * @param maxDatacenterIdparam maxDatacenterIdparam - * @return 数据中心ID - */ - protected long getDatacenterIdBack(long maxDatacenterIdparam) { - final int numbera = 0x000000FF; - final int numberb = 0x0000FF00; - final int number2 = 2; - final int number6 = 6; - final int number8 = 8; - long id; - try { - InetAddress ip = InetAddress.getLocalHost(); - NetworkInterface network = NetworkInterface.getByInetAddress(ip); - if (network == null) { - id = 1L; - } else { - byte[] mac = network.getHardwareAddress(); - id = ((numbera & (long) mac[mac.length - 1]) - | (numberb & (((long) mac[mac.length - number2]) << number8))) >> number6; - id = id % (maxDatacenterIdparam + 1); - } - } catch (IOException e) { - throw new SystemRuntimeException(e); - } - return id; - } - -} +/** + * IdWorker.java + * Created at 2016-11-01 + * Created by wangkang + * Copyright (C) 2016 itkk.org, All rights reserved. + */ +package org.itkk.udf.id; + +import org.apache.commons.lang3.StringUtils; +import org.itkk.udf.core.exception.SystemRuntimeException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.UUID; + +/** + * 描述 : 分布式id生成器,基于twiter的snowflake + * + * @author wangkang + */ +public class IdWorker { + + /** + * uuid类型 + */ + public static final String UUID_TYPE = "uuid"; + + /** + * uuid类型 + */ + public static final String MAC_PID_TYPE = "mac_pid"; + + /** + * 描述 : 日志 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(IdWorker.class); + + /** + * 描述 : 机器ID + */ + private long workerId; + + /** + * 描述 : 数据中心ID + */ + private long datacenterId; + + /** + * 描述 : 并发控制 + */ + private long sequence = 0L; + + /** + * 描述 : 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动) + */ + private long twepoch = 1288834974657L; + + /** + * 描述 : 机器标识位数 + */ + private long workerIdBits = 5L; + + /** + * 描述 : 数据中心标识位数 + */ + private long datacenterIdBits = 5L; + + /** + * 描述 : 机器ID最大值 + */ + private long maxWorkerId = -1L ^ (-1L << workerIdBits); + + /** + * 描述 : 数据中心ID最大值 + */ + private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + + /** + * 描述 : 毫秒内自增位 + */ + private long sequenceBits = 12L; + + /** + * 描述 : 机器ID偏左移12位 + */ + private long workerIdShift = sequenceBits; + + /** + * 描述 : 数据中心ID左移17位 + */ + private long datacenterIdShift = sequenceBits + workerIdBits; + + /** + * 描述 : 时间毫秒左移22位 + */ + private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + /** + * 描述 : sequenceMask + */ + private long sequenceMask = -1L ^ (-1L << sequenceBits); + + /** + * 描述 : 上次生产id时间戳 + */ + private long lastTimestamp = -1L; + + /** + * 描述 : 构造函数 + */ + public IdWorker() { + this(IdWorker.UUID_TYPE); + } + + /** + * 构造函数 + * + * @param type ID构造类型 + */ + public IdWorker(String type) { + if (StringUtils.isNotBlank(type)) { + switch (type) { + case IdWorker.UUID_TYPE: + this.datacenterId = getDatacenterId(maxDatacenterId); + this.workerId = getWorkerId(maxWorkerId); + break; + case IdWorker.MAC_PID_TYPE: //DOCKER容器下有问题 + this.datacenterId = getDatacenterIdBack(maxDatacenterId); + this.workerId = getWorkerIdBack(this.datacenterId, maxWorkerId); + break; + default: + throw new SystemRuntimeException("unknow type"); + } + } else { + throw new SystemRuntimeException("type must not be null"); + } + LOGGER.info("type:{},datacenterId:{},workerId:{}", type, this.datacenterId, this.workerId); + } + + /** + * 描述 : 构造函数 + * + * @param workerId workerId + * @param datacenterId datacenterId + */ + public IdWorker(long workerId, long datacenterId) { + // sanity check for workerId + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException( + String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException( + String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + LOGGER.info("datacenterId:{},workerId:{}", maxDatacenterId, maxWorkerId); + } + + /** + * 描述 : 下一个ID + * + * @return ID + */ + public synchronized long nextId() { + long timestamp = timeGen(); + if (timestamp < lastTimestamp) { + throw new SystemRuntimeException( + String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", + lastTimestamp - timestamp)); + } + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + if (sequence == 0) { + timestamp = tilNextMillis(lastTimestamp); + } + } else { + sequence = 0L; + } + lastTimestamp = timestamp; + return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) + | (workerId << workerIdShift) | sequence; + } + + /** + * 描述 : 获得下一个毫秒数 + * + * @param lastTimestampParam lastTimestampParam + * @return 下一个毫秒数 + */ + protected long tilNextMillis(long lastTimestampParam) { + long timestamp = timeGen(); + while (timestamp <= lastTimestampParam) { + timestamp = timeGen(); + } + return timestamp; + } + + /** + * 描述 : 获得当前时间毫秒数 + * + * @return 当前时间毫秒数 + */ + protected long timeGen() { + return System.currentTimeMillis(); + } + + /** + * 描述 : 获取机器ID + * + * @param maxWorkerIdparam maxWorkerIdparam + * @return 机器ID + */ + protected long getWorkerId(long maxWorkerIdparam) { + return Math.abs(UUID.randomUUID().toString().hashCode() % maxWorkerIdparam); + } + + /** + * 描述 : 获取数据中心ID + * + * @param maxDatacenterIdparam maxDatacenterIdparam + * @return 数据中心ID + */ + protected long getDatacenterId(long maxDatacenterIdparam) { + return Math.abs(UUID.randomUUID().toString().hashCode() % maxDatacenterIdparam); + } + + /** + * 描述 : 获取机器ID(备用,docker容器中有问题) + * + * @param datacenterIdparam datacenterIdparam + * @param maxWorkerIdparam maxWorkerIdparam + * @return 机器ID + */ + protected long getWorkerIdBack(long datacenterIdparam, long maxWorkerIdparam) { + final int numbera = 0xffff; + StringBuilder mpid = new StringBuilder(); + mpid.append(datacenterIdparam); + String name = ManagementFactory.getRuntimeMXBean().getName(); + if (!name.isEmpty()) { + //GET jvmPid + mpid.append(name.split("@")[0]); + } + //MAC + PID 的 hashcode 获取16个低位 + return (mpid.toString().hashCode() & numbera) % (maxWorkerIdparam + 1); + } + + /** + * 描述 : 获取数据中心ID(备用,docker容器中有问题) + * + * @param maxDatacenterIdparam maxDatacenterIdparam + * @return 数据中心ID + */ + protected long getDatacenterIdBack(long maxDatacenterIdparam) { + final int numbera = 0x000000FF; + final int numberb = 0x0000FF00; + final int number2 = 2; + final int number6 = 6; + final int number8 = 8; + long id; + try { + InetAddress ip = InetAddress.getLocalHost(); + NetworkInterface network = NetworkInterface.getByInetAddress(ip); + if (network == null) { + id = 1L; + } else { + byte[] mac = network.getHardwareAddress(); + id = ((numbera & (long) mac[mac.length - 1]) + | (numberb & (((long) mac[mac.length - number2]) << number8))) >> number6; + id = id % (maxDatacenterIdparam + 1); + } + } catch (IOException e) { + throw new SystemRuntimeException(e); + } + return id; + } + +} diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerConfig.java b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerConfig.java new file mode 100644 index 0000000..97253ae --- /dev/null +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerConfig.java @@ -0,0 +1,29 @@ +package org.itkk.udf.id; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * IdWorkerConfig + */ +@Configuration +public class IdWorkerConfig { + + /** + * idWorkerProperties + */ + @Autowired + private IdWorkerProperties idWorkerProperties; + + /** + * 描述 : 分布式ID生成器 + * + * @return 分布式ID生成器 + */ + @Bean + public IdWorker idWorker() { + return new IdWorker(idWorkerProperties.getType()); + } + +} diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerProperties.java b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerProperties.java new file mode 100644 index 0000000..078f428 --- /dev/null +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerProperties.java @@ -0,0 +1,40 @@ +package org.itkk.udf.id; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +/** + * IdWorkerProperties + */ +@Component +@ConfigurationProperties(prefix = "org.itkk.id.properties") +@Validated +public class IdWorkerProperties { + + /** + * ID构造类型 + */ + @NotNull + private String type = IdWorker.MAC_PID_TYPE; + + /** + * D构造类型 + * + * @return String + */ + public String getType() { + return type; + } + + /** + * D构造类型 + * + * @param type type + */ + public void setType(String type) { + this.type = type; + } +} diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/web/IIdWorkerController.java b/udf-starter-id/src/main/java/org/itkk/udf/id/web/IIdWorkerController.java new file mode 100644 index 0000000..68f9dd5 --- /dev/null +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/web/IIdWorkerController.java @@ -0,0 +1,59 @@ +/** + * IIdWorkerController.java + * Created at 2017-05-26 + * Created by Administrator + * Copyright (C) 2016 itkk.org, All rights reserved. + */ +package org.itkk.udf.id.web; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.itkk.udf.core.RestResponse; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.util.List; + +/** + * 描述 : IIdWorkerController + * + * @author Administrator + */ +@Api(value = "分布式ID服务", consumes = "application/json", produces = "application/json", protocols = "http") +@RequestMapping(value = "/service/id") +public interface IIdWorkerController { + + /** + * 获得分布式ID + * + * @return ID + */ + @ApiOperation(value = "ID_1", notes = "获得分布式ID(注意:ID为长整型,在javascript下会丢失精度,请注意数据类型转换)") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "header", name = "rmsApplicationName", value = "rms应用名称", required = true, dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsSign", value = "rms认证秘钥", required = true, dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsServiceCode", value = "rms接口编号", required = true, dataType = "string") + }) + @RequestMapping(method = RequestMethod.GET) + RestResponse get(); + + /** + * 批量获得分布式ID + * + * @param count 数量 + * @return ID + */ + @ApiOperation(value = "ID_2", notes = "批量获得分布式ID(注意:ID为长整型,在javascript下会丢失精度,请注意数据类型转换)") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "header", name = "rmsApplicationName", value = "rms应用名称", required = true, dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsSign", value = "rms认证秘钥", required = true, dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsServiceCode", value = "rms接口编号", required = true, dataType = "string"), + @ApiImplicitParam(paramType = "path", name = "count", value = "数量", required = true, dataType = "string") + }) + @RequestMapping(value = "{count}", method = RequestMethod.GET) + RestResponse> get(@PathVariable Integer count); + +} diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/web/IdWorkerController.java b/udf-starter-id/src/main/java/org/itkk/udf/id/web/IdWorkerController.java new file mode 100644 index 0000000..d74bd65 --- /dev/null +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/web/IdWorkerController.java @@ -0,0 +1,45 @@ +/** + * MailController.java + * Created at 2017-05-26 + * Created by Administrator + * Copyright (C) 2016 itkk.org, All rights reserved. + */ +package org.itkk.udf.id.web; + +import org.itkk.udf.core.RestResponse; +import org.itkk.udf.id.IdWorker; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * 描述 : IdWorkerController + * + * @author Administrator + */ +@RestController +public class IdWorkerController implements IIdWorkerController { + + /** + * idWorker + */ + @Autowired + private IdWorker idWorker; + + @Override + public RestResponse get() { + return new RestResponse<>(Long.toString(idWorker.nextId())); + } + + @Override + public RestResponse> get(@PathVariable Integer count) { + List ids = new ArrayList<>(); + for (int i = 0; i < count; i++) { + ids.add(Long.toString(idWorker.nextId())); + } + return new RestResponse<>(ids); + } +}