# jf2util4idea **Repository Path**: youfule/jf2util4idea ## Basic Information - **Project Name**: jf2util4idea - **Description**: 日常使用中积累的java工具包已经工具方法集合 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-12 - **Last Updated**: 2024-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # javautils #### 介绍 日常使用所沉淀积累基础组件和工具 #### 软件架构 目前提供一部分基础工具组件,后续添加更多的组件将涵盖多个领域 ##### cache模块 - 基于配置支持单机、哨兵、分片、集群模式自由切换 - 更加简单的操作API封装 - 一级缓存支持(ehcache & guava cache)、分布式场景多节点自动通知 - 多组缓存配置同时支持 (一个应用多个redis server) - 分布式模式开关 ##### common模块 - 一些常用工具类 - common模块提供基础工具类,依赖common-lang3。 ##### common2模块(需要依赖一些组件或者基础设置) - 分布式锁 - 分布式全局ID生成器 - excel导入导出 ##### filesystem - 文件系统服务目前支持七牛和fastDFS集成,提供了工厂模式和spring注入两种集成方式。 ##### kafka - 基于spring封装简化配置和调用方式 - 基于配置新旧两版Consumer API兼容支持 - 支持二阶段处理,即:fetch线程同步处理和process线程异步处理 - 消费成功业务处理失败自动重试或自定义重试支持 - process线程池采用LinkedTransferQueue,支持线程回收和队列大小限制,确保系统崩溃等不会有数据丢失。 ##### mybatis - 代码生成、自动CRUD、可无缝对接mybaits增强框架Mapper - 基于properties配置多数据源支持,无需修改XML - 读写分离,事务内操作强制读主库 - 基于注解自动缓存管理(所有查询方法结果自动缓存、自动更新,事务回滚缓存同步回滚机制) - 自动缓存实现基于jeesuite-cache和spring-data-redis - 分页组件 - 敏感操作拦截 ##### rest - 自动resonse封装(xml、json) - i18n - request、response日志记录 - 自动友好错误 - 校验框架 ##### scheduler - 支持分布式保证单节点执行(按节点平均分配job) - 支持failvoer,自动切换故障节点 - 支持多节点下并行计算 - 支持无注册中心单机模式 - 支持自定义重试策略 - 支持配置持久化(启动加载、变更保存) - 支持控制台(jeesuite-admin)任务监控、开停、动态修改调度时间策略、手动触发执行 #### 使用说明 ##### common - JsonUtils:Json字符串与对象转化,基于jackson封装。 - 序列化工具:FSTSerializer,JavaSerializer,KryoSerializer,KryoPoolSerializer - PackageScanner:包扫描 - BeanCopyUtils:bean之间值复制工具类,比BeanUtils效率高 - DateUtils:常用日期函数,与common-lang包日期函数互补 - FormatValidateUtils:常用格式校验工具 - HashUtils:MurMurHash算法实现的hash算法 - JDBCUtils:jdbc工具 - ReflectUtils:反射工具 - ResourceUtils:属性读取工具 - NodeNameHolder:全局节点名称 ##### cache - RedisString - RedisObject - RedisList - RedisStrList - RedisNumber - RedisSet - RedisStrSet - RedisSortSet - RedisStrSortSet - RedisHashMap - RedisStrHashMap ```java //字符串 RedisString redisString = new RedisString("User.id:1001"); redisString.set("user1001", 60); String value = redisString.get(); redisString.getTtl(); redisString.exists(); redisString.setExpire(300); redisString.remove(); //对象 RedisObject redisObject = new RedisObject("User.id:1001"); redisObject.set(new User(1001, "jack")); Object user = redisObject.get(); redisObject.getTtl(); redisObject.exists(); redisObject.setExpire(300); redisObject.remove(); //hash RedisHashMap redisHashMap = new RedisHashMap("User.all"); redisHashMap.set("1001", new User(1001, "jack")); redisHashMap.set("1002", new User(1002, "jack2")); Map < String, User > users = redisHashMap.get("1001", "1002"); users = redisHashMap.getAll(); User one = redisHashMap.getOne("1001"); redisHashMap.containsKey("1001"); redisHashMap.remove(); //指定缓存服务组名 //new RedisObject(key, groupName) new RedisObject("User.id:1001", "session_cache"); ``` ##### common2 - 全局Id生成器 目前只实现基于Snowflake算法生成器,后续新增基于数据库sequence的。 ```java SnowflakeGenerator generator = new SnowflakeGenerator("127.0.0.1:2181"); long id = generator.nextId(); System.out.println(id); ``` - 分布式锁 ```java //redis public void run() { RedisDistributeLock lock = new RedisDistributeLock("test"); //boolean getLock = lock.tryLock(5, TimeUnit.SECONDS); lock.lock(); System.out.println("LockWorker[" + id + "] get lock,doing"); try { Thread.sleep(RandomUtils.nextLong(1000, 10000)); } catch(Exception e) {} lock.unlock(); latch.countDown(); System.out.println("LockWorker[" + id + "] release lock,done"); } //zookeeper @Override public void run() { ZkDistributeLock lock = new ZkDistributeLock("127.0.0.1:2181", "test"); lock.lock(); System.out.println("LockWorker[" + id + "] get lock,doing"); try { Thread.sleep(2000); } catch(Exception e) {} lock.unlock(); latch.countDown(); System.out.println("LockWorker[" + id + "] release lock,done"); } ``` ##### filesystem - 工厂模式 配置文件,xx.properties ``` fs.groupNames=group1,group2 # 服务提供者可选值(fastDFS,qiniu) fs.group1.provider=qiniu fs.group1.accessKey=iqq3aa-ncqfdGGubCcS-N8EUV-qale2ezndnrtKS fs.group1.secretKey=1RmdaMVjrjXkyRVPOmyMa6BzcdG5VDdF-SH_HUTe fs.group1.urlprefix=http://7xq7jj.com1.z0.glb.clouddn.com # group2 配置 fs.group2.provider=fastDFS fs.group2.servers=192.168.1.101:22122,192.168.1.102:22122 ..... fs.group2.connectTimeout=3000 fs.group2.maxThreads=100 ...... ``` 参数说明: - groupNames:多个组用“,”隔开,对应七牛的`bucketName` 用法 ``` FSProvider provider = FSClientFactory.build("qiniu", "group1"); String url = provider.upload("test", null, new File("/Users/vakinge/logo.gif")); ``` - spring方式 ``` ``` 用法 ``` @Autowired FSProviderSpringFacade provider; String url = provider.upload("test", null, new File("/Users/vakinge/logo.gif")); ``` ##### kafka - 添加依赖 ```xml com.jeesuite jeesuite-kafka 1.1.0 ``` ##### mybatis - 添加依赖 ```xml com.jeesuite jeesuite-mybatis 最新版本 ``` - 已实现方法 ``` getByKey insert insertSelective updateByKey updateByKeySelective deleteByKey selectAll ``` ##### scheduler - 添加依赖 ```xml com.jeesuite jeesuite-scheduler 1.1.0 ``` - 全局参数说明: ``` groupName 任务组,要确保和其他项目唯一 (必填) registry 注册中心,不配置则为单机模式 (选填) configPersistHandler 持久化配置支持,启动时合并配置和更新配置。(选填) ``` - job参数说明: ``` jobName 任务名,确保同一groupName下唯一 retries 重试次数,默认不重试 cronExpr 执行时间策略,如果配置了configPersistHandler以merge后的为准。 ```