diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanException.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanException.java index 32d0e89aa..ecb25f587 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.exception.HutoolException; /** * Bean异常 * - * @author xiaoleilu + * @author Looly */ public class BeanException extends HutoolException { private static final long serialVersionUID = -8096998667745023423L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/codec/hash/ConsistentHash.java b/hutool-core/src/main/java/org/dromara/hutool/core/codec/hash/ConsistentHash.java index 94c8081d1..fdda5bc36 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/codec/hash/ConsistentHash.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/codec/hash/ConsistentHash.java @@ -23,7 +23,7 @@ import java.util.TreeMap; * 算法实现:https://weblogs.java.net/blog/2007/11/27/consistent-hashing * * @param 节点类型 - * @author xiaoleilu + * @author Looly */ public class ConsistentHash implements Serializable { private static final long serialVersionUID = 1L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/queue/BoundedPriorityQueue.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/queue/BoundedPriorityQueue.java index bec2b56e4..475c7cc93 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/queue/BoundedPriorityQueue.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/queue/BoundedPriorityQueue.java @@ -21,7 +21,7 @@ import java.util.PriorityQueue; /** * 有界优先队列
* 按照给定的排序规则,排序元素,当队列满时,按照给定的排序规则淘汰末尾元素(去除末尾元素) - * @author xiaoleilu + * @author Looly * * @param 成员类型 */ diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/ComparatorException.java b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/ComparatorException.java index 12a672ad7..33b60818e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/ComparatorException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/ComparatorException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.exception.HutoolException; /** * 比较异常 * - * @author xiaoleilu + * @author Looly */ public class ComparatorException extends HutoolException { private static final long serialVersionUID = 4475602435485521971L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/BasicType.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/BasicType.java index ce1755127..7f23fdf59 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/BasicType.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/BasicType.java @@ -21,7 +21,7 @@ import java.util.Set; * 基本变量类型的枚举
* 基本类型枚举包括原始类型和包装类型 * - * @author xiaoleilu + * @author Looly */ public enum BasicType { /** diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/ConvertException.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/ConvertException.java index 8ad25535c..daed821ab 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/ConvertException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/ConvertException.java @@ -19,7 +19,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * 转换异常 * - * @author xiaoleilu + * @author Looly */ public class ConvertException extends HutoolException { private static final long serialVersionUID = 4730597402855274362L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateException.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateException.java index 1e3d70ca2..892cbcaef 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * 工具类异常 - * @author xiaoleilu + * @author Looly */ public class DateException extends RuntimeException{ private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateTime.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateTime.java index 074c4c391..af7a08566 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateTime.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateTime.java @@ -40,7 +40,7 @@ import java.util.TimeZone; * 此类继承了{@link Date},并提供扩展方法,如时区等。
* 此类重写了父类的{@code toString()}方法,返回值为"yyyy-MM-dd HH:mm:ss"格式 * - * @author xiaoleilu + * @author Looly */ public class DateTime extends Date { private static final long serialVersionUID = -5395712593979185936L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateUtil.java index a2bff803b..82055135c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateUtil.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; /** * 日期时间工具类 * - * @author xiaoleilu + * @author Looly * @see TimeUtil java8日志工具类 * @see DatePattern 日期常用格式工具类 */ diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/exception/CloneException.java b/hutool-core/src/main/java/org/dromara/hutool/core/exception/CloneException.java index 42ab87b8d..aab33a591 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/exception/CloneException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/exception/CloneException.java @@ -15,7 +15,7 @@ package org.dromara.hutool.core.exception; /** * 克隆异常 * - * @author xiaoleilu + * @author Looly */ public class CloneException extends HutoolException { private static final long serialVersionUID = 6774837422188798989L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/exception/DependencyException.java b/hutool-core/src/main/java/org/dromara/hutool/core/exception/DependencyException.java index 926d11193..3e7cddd9e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/exception/DependencyException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/exception/DependencyException.java @@ -15,7 +15,7 @@ package org.dromara.hutool.core.exception; /** * 依赖异常 * - * @author xiaoleilu + * @author Looly * @since 4.0.10 */ public class DependencyException extends HutoolException { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/exception/NotInitedException.java b/hutool-core/src/main/java/org/dromara/hutool/core/exception/NotInitedException.java index ab299a4e6..f6334b8df 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/exception/NotInitedException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/exception/NotInitedException.java @@ -15,7 +15,7 @@ package org.dromara.hutool.core.exception; /** * 未初始化异常 * - * @author xiaoleilu + * @author Looly */ public class NotInitedException extends HutoolException { private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/exception/ValidateException.java b/hutool-core/src/main/java/org/dromara/hutool/core/exception/ValidateException.java index a523f091a..3f365d489 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/exception/ValidateException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/exception/ValidateException.java @@ -15,7 +15,7 @@ package org.dromara.hutool.core.exception; /** * 验证异常 * - * @author xiaoleilu + * @author Looly */ public class ValidateException extends StatefulException { private static final long serialVersionUID = 6057602589533840889L; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/IoUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/IoUtil.java index 887edc669..7341173ac 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/IoUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/IoUtil.java @@ -59,7 +59,7 @@ import java.util.Objects; * IO工具类
* IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。 * - * @author xiaoleilu + * @author Looly */ public class IoUtil extends NioUtil { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/NoResourceException.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/NoResourceException.java index 89dc60e4f..a6b92905c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/NoResourceException.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/NoResourceException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * 资源文件或资源不存在异常 * - * @author xiaoleilu + * @author Looly * @since 4.0.2 */ public class NoResourceException extends IORuntimeException { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/NetUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/NetUtil.java index 38724802c..bd29acb44 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/NetUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/NetUtil.java @@ -38,7 +38,7 @@ import java.util.function.Predicate; /** * 网络相关工具 * - * @author xiaoleilu + * @author Looly */ public class NetUtil { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadFile.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadFile.java index a8ccb33fe..5cdbe5f20 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadFile.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadFile.java @@ -27,7 +27,7 @@ import java.nio.file.NoSuchFileException; /** * 上传的文件对象 * - * @author xiaoleilu + * @author Looly */ public class UploadFile { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadSetting.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadSetting.java index 28a5f7cf6..7b268fe80 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadSetting.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/multipart/UploadSetting.java @@ -15,7 +15,7 @@ package org.dromara.hutool.core.net.multipart; /** * 上传文件设定文件 * - * @author xiaoleilu + * @author Looly * */ public class UploadSetting { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectFactory.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectFactory.java new file mode 100644 index 000000000..ed27f021a --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectFactory.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool; + +/** + * 对象工厂接口,用于自定义对象创建、验证和销毁
+ * 来自:https://github.com/DanielYWoo/fast-object-pool/ + * + * @param 对象类型 + * @author Daniel + */ +public interface ObjectFactory { + /** + * 创建对象 + * + * @return 创建的对象 + */ + T create(); + + /** + * 验证对象可用性,一般用于对象池中借出对象和返还对象前的验证操作。 + * + * @param t 被验证的对象 + * @return 是否可用 + */ + boolean validate(T t); + + /** + * 销毁对象,用于在验证对象不可用或不需要时的销毁逻辑。 + * + * @param t 被销毁的对象 + */ + void destroy(T t); +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectPool.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectPool.java new file mode 100644 index 000000000..30b90b4ba --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/ObjectPool.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool; + +import java.io.Closeable; +import java.io.Serializable; + +/** + * 对象池接口,提供: + *
    + *
  • {@link #borrowObject()} 对象借出。
  • + *
  • {@link #returnObject(Poolable)}对象归还。
  • + *
+ * + * @param 对象类型 + * @author looly + */ +public interface ObjectPool extends Closeable, Serializable { + + /** + * 借出对象 + * + * @return 对象 + */ + Poolable borrowObject(); + + /** + * 归还对象 + * + * @param obj 对象 + * @return this + */ + ObjectPool returnObject(final Poolable obj); +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/PoolConfig.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/PoolConfig.java new file mode 100644 index 000000000..27f04d993 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/PoolConfig.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool; + +/** + * 对象池配置,提供基本的配置项,包括: + *
    + *
  • 最小池大小(初始大小)
  • + *
  • 最大池大小
  • + *
  • 最大池大小
  • + *
  • 最长等待时间
  • + *
  • 最长空闲时间
  • + *
+ */ +public class PoolConfig { + private int minSize; + private int maxSize; + + private long maxWait; + private long maxIdle; + + public int getMinSize() { + return minSize; + } + + public PoolConfig setMinSize(final int minSize) { + this.minSize = minSize; + return this; + } + + public int getMaxSize() { + return maxSize; + } + + public PoolConfig setMaxSize(final int maxSize) { + this.maxSize = maxSize; + return this; + } + + public long getMaxWait() { + return maxWait; + } + + public PoolConfig setMaxWait(final long maxWait) { + this.maxWait = maxWait; + return this; + } + + public long getMaxIdle() { + return maxIdle; + } + + public PoolConfig setMaxIdle(final long maxIdle) { + this.maxIdle = maxIdle; + return this; + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/Poolable.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/Poolable.java new file mode 100644 index 000000000..b7acbc564 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/Poolable.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool; + +import org.dromara.hutool.core.lang.wrapper.Wrapper; + +public interface Poolable extends Wrapper { + void returnObject(); +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/package-info.java new file mode 100644 index 000000000..70c206540 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/package-info.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * 对象池封装实现
+ * 整体参考了: + *
    + *
  • https://github.com/DanielYWoo/fast-object-pool/
  • + *
  • https://github.com/apache/commons-pool
  • + *
+ * + * @author looly + */ +package org.dromara.hutool.core.pool; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionObjectPool.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionObjectPool.java new file mode 100644 index 000000000..f791d8310 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionObjectPool.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool.partition; + +import org.dromara.hutool.core.io.IoUtil; +import org.dromara.hutool.core.pool.*; +import org.dromara.hutool.core.thread.ThreadUtil; + +import java.io.IOException; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; + +/** + * 分区对象池实现
+ * 来自:https://github.com/DanielYWoo/fast-object-pool/blob/master/src/main/java/cn/danielw/fop/ObjectPool.java + * + * @param 对象类型 + * @author Daniel, Looly + */ +public class PartitionObjectPool implements ObjectPool { + private static final long serialVersionUID = 1L; + + private final PartitionPoolConfig config; + // 分区,创建后不再变更,线程安全 + private final PoolPartition[] partitions; + + private boolean closed; + + /** + * 构造 + * + * @param config 配置 + * @param factory 对象工厂,用于创建、验证和销毁对象 + */ + @SuppressWarnings({"unchecked", "resource"}) + public PartitionObjectPool(final PartitionPoolConfig config, final ObjectFactory factory) { + this.config = config; + + final int partitionSize = config.getPartitionSize(); + this.partitions = new PoolPartition[partitionSize]; + for (int i = 0; i < partitionSize; i++) { + partitions[i] = new PoolPartition<>(config, createBlockingQueue(config), factory); + } + } + + /** + * 获取持有对象总数 + * + * @return 总数 + */ + public int getTotal() { + int size = 0; + for (final PoolPartition subPool : partitions) { + size += subPool.getTotal(); + } + return size; + } + + @Override + public Poolable borrowObject() { + checkClosed(); + final int partitionIndex = (int) (ThreadUtil.currentThreadId() % config.getPartitionSize()); + return this.partitions[partitionIndex].borrowObject(); + } + + public PartitionObjectPool returnObject(final Poolable obj) { + checkClosed(); + final int partitionIndex = (int) (ThreadUtil.currentThreadId() % config.getPartitionSize()); + this.partitions[partitionIndex].returnObject(obj); + return this; + } + + @Override + public void close() throws IOException { + this.closed = true; + IoUtil.closeQuietly(this.partitions); + } + + protected BlockingQueue> createBlockingQueue(final PoolConfig poolConfig) { + return new ArrayBlockingQueue<>(poolConfig.getMaxSize()); + } + + private void checkClosed() { + if (this.closed) { + throw new IllegalStateException("Object Pool is closed!"); + } + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolConfig.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolConfig.java new file mode 100644 index 000000000..d82e00b6e --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolConfig.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool.partition; + +import org.dromara.hutool.core.pool.PoolConfig; + +/** + * 分局对象池配置 + * + * @author looly + */ +public class PartitionPoolConfig extends PoolConfig { + private int partitionSize; + + public int getPartitionSize() { + return partitionSize; + } + + public PartitionPoolConfig setPartitionSize(final int partitionSize) { + this.partitionSize = partitionSize; + return this; + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolable.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolable.java new file mode 100644 index 000000000..13d3bbf35 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PartitionPoolable.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool.partition; + +import org.dromara.hutool.core.pool.Poolable; + +public class PartitionPoolable implements Poolable { + + private final T raw; + private final PoolPartition partition; + + public PartitionPoolable(final T raw, PoolPartition partition) { + this.raw = raw; + this.partition = partition; + } + + @Override + public T getRaw() { + return this.raw; + } + + @Override + public void returnObject() { + this.partition.returnObject(this); + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PoolPartition.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PoolPartition.java new file mode 100644 index 000000000..ee5b28d04 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/PoolPartition.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.pool.partition; + +import org.dromara.hutool.core.exception.HutoolException; +import org.dromara.hutool.core.pool.ObjectFactory; +import org.dromara.hutool.core.pool.PoolConfig; +import org.dromara.hutool.core.pool.Poolable; + +import java.io.Closeable; +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TimeUnit; + +public class PoolPartition implements Closeable { + + private final PoolConfig config; + private final ObjectFactory objectFactory; + + private BlockingQueue> queue; + // 记录对象总数(包括借出对象) + private int total; + + public PoolPartition(PoolConfig config, BlockingQueue> queue, ObjectFactory objectFactory) { + this.config = config; + this.queue = queue; + this.objectFactory = objectFactory; + + final int minSize = config.getMinSize(); + for (int i = 0; i < minSize; i++) { + queue.add(createPoolable()); + } + total = minSize; + } + + public Poolable borrowObject() { + // 非阻塞获取 + Poolable poolable = this.queue.poll(); + if (null != poolable) { + return poolable; + } + + // 扩容 + if (increase(1) <= 0) { + // 池分区已满,只能等待是否有返还的对象 + poolable = waitingPoll(); + if (null == poolable) { + // 池空间达到最大值,但是无可用对象 + throw new HutoolException("Pool exhausted!"); + } + } + + // 扩容成功,继续借对象 + return borrowObject(); + } + + /** + * 归还对象 + * + * @param obj 归还的对象 + * @return this + */ + public PoolPartition returnObject(final Poolable obj) { + try { + this.queue.put(obj); + } catch (InterruptedException e) { + throw new HutoolException(e); + } + return this; + } + + public synchronized int increase(int increaseSize) { + if (increaseSize + total > config.getMaxSize()) { + increaseSize = config.getMaxSize() - total; + } + + try { + for (int i = 0; i < increaseSize; i++) { + queue.put(createPoolable()); + } + total += increaseSize; + } catch (final InterruptedException e) { + throw new HutoolException(e); + } + return increaseSize; + } + + /** + * 销毁对象,注意此方法操作的对象必须在队列外 + * + * @param obj 被销毁的对象 + * @return this + */ + public synchronized PoolPartition free(final Poolable obj) { + objectFactory.destroy(obj.getRaw()); + total--; + return this; + } + + /** + * 获取对象总数,包括借出对象数 + * + * @return 对象数 + */ + public int getTotal() { + return this.total; + } + + @Override + public void close() throws IOException { + this.queue.forEach(this::free); + this.queue.clear(); + this.queue = null; + } + + protected Poolable createPoolable() { + return new PartitionPoolable<>(objectFactory.create(), this); + } + + private Poolable waitingPoll() { + final long maxWait = this.config.getMaxWait(); + try { + if (maxWait <= 0) { + return this.queue.take(); + } + return this.queue.poll(maxWait, TimeUnit.MILLISECONDS); + } catch (final InterruptedException e) { + throw new HutoolException(e); + } + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/package-info.java new file mode 100644 index 000000000..2bc0786e9 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/pool/partition/package-info.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * 基于分区的对象池实现,参考:https://github.com/DanielYWoo/fast-object-pool + * + * @author Daniel, Looly + */ +package org.dromara.hutool.core.pool.partition; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java index 7d469c4b7..faad9e498 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java @@ -43,7 +43,7 @@ import java.util.function.Predicate; /** * 类工具类
* - * @author xiaoleilu + * @author Looly */ public class ClassUtil { @@ -116,7 +116,7 @@ public class ClassUtil { * 例如:ClassUtil这个类
* *
-	 * isSimple为false: "com.xiaoleilu.hutool.util.ClassUtil"
+	 * isSimple为false: "org.dromara.hutool.core.reflect.ClassUtil"
 	 * isSimple为true: "ClassUtil"
 	 * 
* @@ -551,7 +551,7 @@ public class ClassUtil { /** * 获得给定类所在包的名称
* 例如:
- * com.xiaoleilu.hutool.util.ClassUtil =》 com.xiaoleilu.hutool.util + * org.dromara.hutool.core.reflect.ClassUtil =》 org.dromara.hutool.core.reflect * * @param clazz 类 * @return 包名 @@ -571,7 +571,7 @@ public class ClassUtil { /** * 获得给定类所在包的路径
* 例如:
- * com.xiaoleilu.hutool.util.ClassUtil =》 com/xiaoleilu/hutool/util + * org.dromara.hutool.core.reflect.ClassUtil =》 org/dromara/hutool/core/reflect * * @param clazz 类 * @return 包名 diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/method/MethodUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/method/MethodUtil.java index 5efa4fe44..705ad59cf 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/method/MethodUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/method/MethodUtil.java @@ -675,7 +675,8 @@ public class MethodUtil { * 非单例模式,如果是非静态方法,每次创建一个新对象 * * @param 对象类型 - * @param classNameWithMethodName 类名和方法名表达式,类名与方法名用{@code .}或{@code #}连接 例如:com.xiaoleilu.hutool.StrUtil.isEmpty 或 com.xiaoleilu.hutool.StrUtil#isEmpty + * @param classNameWithMethodName 类名和方法名表达式,类名与方法名用{@code .}或{@code #}连接 + * 例如:org.dromara.hutool.core.text.StrUtil.isEmpty 或 org.dromara.hutool.core.text.StrUtil#isEmpty * @param args 参数,必须严格对应指定方法的参数类型和数量 * @return 返回结果 */ @@ -689,7 +690,8 @@ public class MethodUtil { * 执行非static方法时,必须满足对象有默认构造方法
* * @param 对象类型 - * @param classNameWithMethodName 类名和方法名表达式,例如:com.xiaoleilu.hutool.StrUtil#isEmpty或com.xiaoleilu.hutool.StrUtil.isEmpty + * @param classNameWithMethodName 类名和方法名表达式, + * 例如:org.dromara.hutool.core.text.StrUtil#isEmpty或org.dromara.hutool.core.text.StrUtil.isEmpty * @param isSingleton 是否为单例对象,如果此参数为false,每次执行方法时创建一个新对象 * @param args 参数,必须严格对应指定方法的参数类型和数量 * @return 返回结果 diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java index 18d2c26d0..2bc4f9f9c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java @@ -36,7 +36,7 @@ import java.util.regex.Pattern; * 正则相关工具类
* 常用正则请见 {@link Validator} * - * @author xiaoleilu + * @author Looly */ public class ReUtil { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java index ab36d8090..fb52e0b62 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java @@ -27,7 +27,7 @@ import java.util.Map; * 字符串工具类
* 此工具主要针对单个字符串的操作 * - * @author xiaoleilu + * @author Looly */ public class StrUtil extends CharSequenceUtil implements StrPool { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java index e68aa0da9..ae65b12b7 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java @@ -21,7 +21,7 @@ import java.util.function.Predicate; * escape采用ISO Latin字符集对指定的字符串进行编码。
* 所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。 * - * @author xiaoleilu + * @author Looly */ public class EscapeUtil { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/thread/SyncFinisher.java b/hutool-core/src/main/java/org/dromara/hutool/core/thread/SyncFinisher.java index 38dadbe32..4b48eb720 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/thread/SyncFinisher.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/thread/SyncFinisher.java @@ -233,7 +233,7 @@ public class SyncFinisher implements Closeable { /** * 工作者,为一个线程 * - * @author xiaoleilu + * @author Looly */ public abstract class Worker implements Runnable { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/thread/ThreadUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/thread/ThreadUtil.java index f80bca21b..facf19ff0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/thread/ThreadUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/thread/ThreadUtil.java @@ -680,6 +680,16 @@ public class ThreadUtil { return (null != s) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); } + /** + * 获取当前线程ID,即TID + * + * @return TID + * @since 6.0.0 + */ + public static long currentThreadId() { + return Thread.currentThread().getId(); + } + /** * 创建线程工厂 * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/util/RandomUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/util/RandomUtil.java index 170333ce4..c1ac39c53 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/util/RandomUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/util/RandomUtil.java @@ -35,7 +35,7 @@ import java.util.concurrent.ThreadLocalRandom; /** * 随机工具类 * - * @author xiaoleilu + * @author Looly */ public class RandomUtil { diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronException.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronException.java index 4e046fd1e..fc2a3f913 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronException.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.exception.HutoolException; /** * 定时任务异常 * - * @author xiaoleilu + * @author Looly */ public class CronException extends HutoolException { private static final long serialVersionUID = 1L; diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java index 63ecd5bf0..f7573db88 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java @@ -28,7 +28,7 @@ import java.util.concurrent.locks.ReentrantLock; * 此工具持有一个全局{@link Scheduler},所有定时任务在同一个调度器中执行
* {@link #setMatchSecond(boolean)} 方法用于定义是否使用秒匹配模式,如果为true,则定时任务表达式中的第一位为秒,否则为分,默认是分 * - * @author xiaoleilu + * @author Looly * */ public class CronUtil { diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/DbRuntimeException.java b/hutool-db/src/main/java/org/dromara/hutool/db/DbRuntimeException.java index 43fb225af..9e9eda54a 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/DbRuntimeException.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/DbRuntimeException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * 数据库异常 * - * @author xiaoleilu + * @author Looly */ public class DbRuntimeException extends RuntimeException { private static final long serialVersionUID = 3624487785708765623L; diff --git a/hutool-db/src/test/resources/config/example/mongo-example.setting b/hutool-db/src/test/resources/config/example/mongo-example.setting index dbaee4c66..398b47b21 100644 --- a/hutool-db/src/test/resources/config/example/mongo-example.setting +++ b/hutool-db/src/test/resources/config/example/mongo-example.setting @@ -12,7 +12,7 @@ #-------------------------------------- # MongoDB 连接设定 -# author xiaoleilu +# author Looly #-------------------------------------- #每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默以为10 --int diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/FtpException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/FtpException.java index acc750341..306adb03c 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/FtpException.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ftp/FtpException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * Ftp异常 * - * @author xiaoleilu + * @author Looly */ public class FtpException extends RuntimeException { private static final long serialVersionUID = -8490149159895201756L; diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/mail/MailException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/mail/MailException.java index d61604f5a..30ae79e82 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/mail/MailException.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/mail/MailException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * 邮件异常 - * @author xiaoleilu + * @author Looly */ public class MailException extends RuntimeException{ private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/management/ManagementException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/management/ManagementException.java index 56b21dfee..076980a9f 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/management/ManagementException.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/management/ManagementException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * FtpException异常 * - * @author xiaoleilu + * @author Looly */ public class ManagementException extends RuntimeException { private static final long serialVersionUID = 1L; diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/SshException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/SshException.java index 285cf0e01..80df1a2bb 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/SshException.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/SshException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.exception.HutoolException; /** * SSH异常 * - * @author xiaoleilu + * @author Looly */ public class SshException extends HutoolException { private static final long serialVersionUID = 1L; diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java index 512e2d9d7..43950e248 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.exception.HutoolException; /** * 模板异常 * - * @author xiaoleilu + * @author Looly */ public class TemplateException extends HutoolException { private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/HttpException.java b/hutool-http/src/main/java/org/dromara/hutool/http/HttpException.java index dc01d3b28..79007f410 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/HttpException.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/HttpException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * HTTP异常 * - * @author xiaoleilu + * @author Looly */ public class HttpException extends RuntimeException { private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java index e73d6f89f..1d2db5013 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java @@ -29,7 +29,7 @@ import java.util.Map; /** * Http请求工具类 * - * @author xiaoleilu + * @author Looly */ public class HttpUtil { diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/html/HtmlUtil.java b/hutool-http/src/main/java/org/dromara/hutool/http/html/HtmlUtil.java index 93e3199fb..27858f3b7 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/html/HtmlUtil.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/html/HtmlUtil.java @@ -29,7 +29,7 @@ import java.util.regex.Pattern; *

* 比如去掉指定标签(例如广告栏等)、去除JS、去掉样式等等,这些操作都可以使用此工具类完成。 * - * @author xiaoleilu + * @author Looly */ public class HtmlUtil { diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/webservice/SoapRuntimeException.java b/hutool-http/src/main/java/org/dromara/hutool/http/webservice/SoapRuntimeException.java index 384e36943..e9c7d889e 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/webservice/SoapRuntimeException.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/webservice/SoapRuntimeException.java @@ -17,7 +17,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * SOAP异常 * - * @author xiaoleilu + * @author Looly */ public class SoapRuntimeException extends RuntimeException { private static final long serialVersionUID = 8247610319171014183L; diff --git a/hutool-poi/src/main/java/org/dromara/hutool/poi/exceptions/POIException.java b/hutool-poi/src/main/java/org/dromara/hutool/poi/exceptions/POIException.java index d0d958b1f..a88093ec1 100644 --- a/hutool-poi/src/main/java/org/dromara/hutool/poi/exceptions/POIException.java +++ b/hutool-poi/src/main/java/org/dromara/hutool/poi/exceptions/POIException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * POI异常 * - * @author xiaoleilu + * @author Looly */ public class POIException extends RuntimeException { private static final long serialVersionUID = 2711633732613506552L; diff --git a/hutool-setting/src/test/resources/example/example.set b/hutool-setting/src/test/resources/example/example.set index 46182ea7d..f95ce98ea 100644 --- a/hutool-setting/src/test/resources/example/example.set +++ b/hutool-setting/src/test/resources/example/example.set @@ -1,6 +1,6 @@ # ------------------------------------------------------------- # ----- GroupedSet File with UTF8----- -# @see com.xiaoleilu.hutool.lang.GroupedSet +# @see org.dromara.hutool.setting.GroupedSet # ------------------------------------------------------------- 无分组值1 @@ -21,4 +21,4 @@ 空分组值1 空分组会合并到无分组里 -[没有值的分组] \ No newline at end of file +[没有值的分组] diff --git a/hutool-setting/src/test/resources/example/group-set-example.set b/hutool-setting/src/test/resources/example/group-set-example.set index f3008d24d..fa76c4e56 100644 --- a/hutool-setting/src/test/resources/example/group-set-example.set +++ b/hutool-setting/src/test/resources/example/group-set-example.set @@ -1,7 +1,7 @@ #-------------------------------------- # GroupSet配置文件样例 #每一个分组下有一组set集合 -# author xiaoleilu +# author Looly #-------------------------------------- [group1] @@ -10,4 +10,4 @@ value2 [group2] value1 -value2 \ No newline at end of file +value2 diff --git a/hutool-socket/src/main/java/org/dromara/hutool/socket/SocketRuntimeException.java b/hutool-socket/src/main/java/org/dromara/hutool/socket/SocketRuntimeException.java index e699af209..25ac8742f 100644 --- a/hutool-socket/src/main/java/org/dromara/hutool/socket/SocketRuntimeException.java +++ b/hutool-socket/src/main/java/org/dromara/hutool/socket/SocketRuntimeException.java @@ -18,7 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; /** * Socket异常 * - * @author xiaoleilu + * @author Looly */ public class SocketRuntimeException extends RuntimeException { private static final long serialVersionUID = 8247610319171014183L;