首页 文章 精选 留言 我的

精选列表

搜索[布隆过滤器],共6711篇文章
优秀的个人博客,低调大师

Magician-Web3 1.0.5发布啦,加入了负载均衡和重试策略

Magician-Web3 是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对 web3j 的一些二次打包,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH(BSC、POLYGAN 等)、SOL 和 TRON 本次更新的点 1. 加入了负载均衡,只要配置多个RPC URL 即可自动轮询,可以将流量分散给多个节点,不用一直盯着一个节点“祸害了” 2. 加入了重试策略,当出现了某些意外的原因 导致区块被跳过扫描,那么被跳过的区块高度将进入重试策略,你可以自己进行处理 3. 修改了一点点细节 负载均衡 直接设置多个rpc地址即可 MagicianBlockchainScan.create() .setRpcUrl( // 可以设置1到n个 rpc地址了,超过一个将自动轮询使用 EthRpcInit.create() .addRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545") .addRpcUrl("https://data-seed-prebsc-2-s1.binance.org:8545") .addRpcUrl("https://data-seed-prebsc-1-s2.binance.org:8545") ) .setScanPeriod(1000) .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue()) .addEthMonitorEvent(new EventOne()) .addEthMonitorEvent(new EventThree()) .setRetryStrategy(new EthRetry()) .start(); 重试策略 在符合以下两个条件时,会触发重试策略,两个条件必须全都符合 才会触发重试 1. 当前正在扫描的块高 是空的(块不存在 或者 块里面没交易) 2. 当前正在扫描的块高 < 链上的最新块高 当上面两个条件同时符合的时候,扫描任务会跳过这个块,然后继续扫描下一个块,同时 重试策略会收到被跳过的块高, 你可以在重试策略里 自己处理 创建一个重试策略 public class EthRetry implements RetryStrategy { @Override public void retry(BigInteger blockNumber) { } } 将重试策略添加到扫描任务中 MagicianBlockchainScan.create() .setRetryStrategy(new EthRetry())// 调用这个方法添加 .start(); 需要注意线程数量的配置 如果你此时开了一个扫块任务 + 一个 重试策略,那么需要占用两个线程,所以参数必须传2 // 初始化线程池,核心线程数必须 >= 扫块的任务数量 + 重试策略的数量 EventThreadPool.init(2); 细节调整 1. 扫描频率最低可以设置500毫秒 2. 设置RPC地址的 传参类型变了 3. 由于第二点的优化,现在可以根据RPC地址的类型来判断你要扫描什么链了,所以去除了ChainType的设置 MagicianBlockchainScan.create() .setRpcUrl(// 这里发生了改变 EthRpcInit.create() .addRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545") .addRpcUrl("https://data-seed-prebsc-2-s1.binance.org:8545") .addRpcUrl("https://data-seed-prebsc-1-s2.binance.org:8545") ) .setScanPeriod(1000)// 这个参数最低可以设置为500了 .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue()) .addEthMonitorEvent(new EventOne()) .addEthMonitorEvent(new EventThree()) .setRetryStrategy(new EthRetry()) .start(); 可以访问官网了解更多:https://magician-io.com

优秀的个人博客,低调大师

smart-doc 2.1.1发布,紧急修复推送文档到 Torna 的 bug

smart-doc 是一款同时支持 java restful api 和 Apache Dubbo rpc 接口文档生成的工具,smart-doc 颠覆了传统类似 swagger 这种大量采用注解侵入来生成文档的实现方法。 smart-doc 完全基于接口源码分析来生成接口文档,完全做到零注解侵入,你只需要按照 java 标准注释编写,smart-doc 就能帮你生成一个简易明了的 markdown 或是一个像 GitBook 样式的静态 html 文档。如果你已经厌倦了 swagger 等文档工具的无数注解和强侵入污染,那请拥抱 smart-doc 吧! 功能特性 支持接口 debug。 零注解、零学习成本、只需要写标准 java 注释。 基于源代码接口定义自动推导,强大的返回结构推导。 支持 Spring MVC,Spring Boot,Spring Boot Web Flux(controller 书写方式)。 支持 Callable,Future,CompletableFuture 等异步接口返回的推导。 支持 JavaBean 上的 JSR303 参数校验规范,支持分组验证。 对 json 请求参数的接口能够自动生成模拟 json 参数。 对一些常用字段定义能够生成有效的模拟值。 支持生成 json 返回值示例。 支持从项目外部加载源代码来生成字段注释(包括标准规范发布的 jar 包)。 支持生成多种格式文档:Markdown、HTML5、Asciidoctor、Postman collection、Open Api 3.0+。 轻易实现在 Spring Boot 服务上在线查看静态 HTML5 api 文档。 开放文档数据,可自由实现接入文档管理系统。 一款代码注释检测工具,不写注释的小伙伴逃不过法眼了。 插件式快速集成(支持 maven 和 gradle 插件)。 支持 Apache Dubbo rpc 文档生成。 Smart-doc 和其他工具的支持 功能特性 smart-doc swagger 代码侵入 无 注解侵入性严重 集成复杂度 简单,只需插件 偏复杂 插件支持 有gradle和maven插件 无插件 openapi规范支持 支持openapi 3.0 完全支持openapi的版本 CI构建集成 可在ci构建阶段使用 maven或者gradle命令 启动插件生成文档 不支持 集中化文档中心集成 已经和torna企业级接口文档管理平台对接 不支持 维护持续性 值得信赖,开源后用户基础多,一直持续维护 全球用户多,开源维护值得信赖 接口debug 2.0.0版本开始已经支持debug,页面比swagger漂亮太多了。 支持 Smart-doc 从 2.0.0 后几乎实现了 swagger ui 的功能,并且比 swagger ui 更简洁大方,也更符合国内开发者的诉求。当然 smart-doc 的功能也已经 超过了 swagger 为 java 开发者提供的功能。当然 smart-doc 本身是只支持扫描代码生成 openapi 3.0 的文档的,也可以将生成的 openapi 3.0 文档导入到其他ui中渲染展示。 更新内容 从 2.0.0 版本开始,smart-doc 完全支持生成 debug 调试页面。从本次发布的 2.1.1版本起,smart-doc 的对接了企业级的接口文档管理平台。 1. 修复Map嵌套在某些结构体中栈溢出问题,gitee #I3CCLY。 2. 修复Torna数据推送问题。 debug 页面效果 maven或gradle插件 smart-doc 官方为了方便用户快速和无侵入的集成 smart-doc 的文档 api 生成能力,我们开发可相关的 maven 或者 gradle 插件。这里也推荐使用插件的方式来使用 smart-doc。 https://gitee.com/smart-doc-team/smart-doc-maven-plugin 官方推荐方案 smart-doc +Torna组成行业领先的文档生成和管理解决方案,使用smart-doc无侵入完成Java源代码分析和提取注释生成API文档,自动将文档推送到Torna企业级接口文档管理平台。 smart-doc+Torna文档自动化 smart-doc在国内很多企业中被用来替换了swagger,甚至是在国内Top 3内的大厂都有smart-doc的二次开发版本。Torna未来的目标是追赶和超越Yapi。smart-doc针对java spring技术栈的解析能力目前为业内最强(不服就拿工具来跑smart-doc的解析demo)。所以smart-doc+Torna的方案威力巨大,Torna目前处于高速迭代期,欢迎体验Torna,我们努力为社区提供高效好用的接口文档解决方案。 升级建议 smart-doc 这个版本最大的变更是对接了Torna企业级接口文档管理系统。 DEMO 使用demo轻松玩转接口文档生成,其他用户案例文档效果展示:https://api.doubans.com/ 知名用户 科大讯飞 一加 小米 鸣谢 smart-doc也是利用一些开源技术构建起来的,我在这里对下列开源项目表示感谢。 Beetl国内开源的JAVA模板引擎 QDOX 开源JAVA源代码解析库

优秀的个人博客,低调大师

OPIPING v1.0.1发布,Api 管理及自动化测试工具

为中小企业提供一套实用、高效的 Api 管理、自动化测试、Api 应用市场等系统,让企业更加专注于自身业务的发展,以实现效率最优、成本最优。 v1.0.1 更新说明 #1 修复Api添加时详情页跳转错误 #2 调整项目环境url地址正则匹配规则 功能说明 支持多团队、多项目、多环境,更符合技术开发和使用场景 支持 Api 场景组并发测试、性能测试 通过功能权限、数据权限让您精准的控制用户的使用权限,使其尽在掌控之中 动态生成 API 数据,让前后端更好的协同开发,降低等待时间,提高开发效率 官方地址:https://www.opiping.com/ 操作手册:https://shuka.opiping.com/t/opiping gitee地址:https://gitee.com/duolatech/xapimanager github地址:https://github.com/duolatech/xapimanager

优秀的个人博客,低调大师

spring-boot-plus V1.4.0发布,集成用户角色权限部门管理

更新日志 CHANGELOG [V1.4.0] 2019.11.5🚔 spring-boot-plus集成用户角色权限部门管理 ⭐️New Features 两种方式获取验证码 用户角色权限部门功能 同时生成多张表代码 ⚡️Optimization 自定义是否启用Shiro权限拦截 优化LogAop配置 代码生成模板优化,三种生成策略 自定义生成ShiroRequiresPermissions注解 Jackson工具类,按字段顺序格式化输出 BaseEnum枚举父接口,EnumController,BaseEnumUtil,EnumTypeValidator校验/获取枚举信息 🐞Bug Fixes fix #81 刷新token问题 fix 获取角色token问题 fix refreshToken方法和LoginUtil工具类方法问题 📔Documentation RBAC用户角色权限 🔨Dependency Upgrades Upgrade tospring-boot2.2.0.RELEASE Upgrade tospring-boot-admin2.2.0-SNAPSHOT Upgrade tolombok1.18.10 Upgrade tohutool5.0.3 Upgrade tomapstruct1.3.1.Final Upgrade tohutool5.0.4 RBAC用户角色权限 用户角色权限部门管理核心接口介绍 #Shiro权限配置 👉Shiro权限配置 #数据库模型图 👉spring-boot-plus初始化SQL下载 #获取验证码 可配置是否启用验证码 默认未启用 如已启用验证码校验,登陆时,需传入verifyToken和code #验证码演示 spring-boot-plus: # 是否启用ansi控制台输出有颜色的字体 enable-ansi: true # 是否启用验证码 enable-verify-code: true enable-verify-code设置为true启用验证码验证 #两种方式获取验证码 验证码后台保存在Redis中,过期时间默认为5分钟 #方式一: 输出图片流到浏览器,验证码token输出到响应头 http://localhost:8888/verificationCode/getImage Response Headers HTTP/1.1 200 verifyToken: 6515b4b798ce49e68b1e40f98ff8eb19 #方式二: 获取Base64编码图片和验证码token http://localhost:8888/verificationCode/getBase64Image { "code": 200, "msg": "操作成功", "success": true, "data": { "image": "data:image/png;base64,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", "verifyToken": "42ba8abde7bc47b2b1397b4d6676956a" }, "time": "2019-11-01 22:40:37" } #系统用户登陆 POST请求,Content-Type:application/json http://127.0.0.1:8888/login 请求参数 { "code": "验证码", "password": "123456", "username": "admin", "verifyToken": "验证码token" } #注意 如果没有启用验证码登陆,则只需传入username和password 前端应将密码加密后进行传输 #登陆成功 返回登陆用户信息:部门/角色/权限 返回用户token { "code": 200, "msg": "登陆成功", "success": true, "data": { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJpc3MiOiJzcHJpbmctYm9vdC1wbHVzIiwiZXhwIjoxNTcyNjIzMDE5LCJpYXQiOjE1NzI2MTk0MTksImp0aSI6IjdlZmVlM2UwMjc2MTRiYTc5M2I2YmYwZmE4NTgzYmUwIiwidXNlcm5hbWUiOiJhZG1pbiJ9.O3w7CNRqw_Miwp8MDzPND6w490c9Q7yFlKpFJK9ubSU", "loginSysUserVo": { "id": "1", "username": "admin", "nickname": "管理员", "gender": 1, "state": 1, "departmentId": "1", "departmentName": "管理部", "roleId": "1", "roleName": "管理员", "roleCode": "admin", "permissionCodes": [ "sys:permission:codes", "system:management", "sys:department:update", "sys:department:page", "sys:role:management", "sys:permission:add", "sys:user:add", "sys:role:page", "sys:permission:page", "sys:department:delete", "sys:permission:management", "sys:user:delete", "sys:department:management", "sys:user:page", "sys:user:update", "sys:user:update:password", "sys:user:update:head", "sys:role:add", "sys:permission:menu:tree", "sys:department:info", "sys:permission:all:menu:list", "sys:permission:info", "sys:role:info", "sys:permission:all:menu:tree", "sys:permission:update", "sys:permission:menu:list", "sys:role:update", "sys:user:info", "sys:user:management", "sys:role:delete", "sys:permission:delete" ] } }, "time": "2019-11-01 22:43:39" } token默认失效时间为1个小时 设置JWT Token失效时间 ############################ JWT start ############################# jwt: # 默认过期时间1小时,单位:秒 expire-second: 3600 后台使用Redis缓存登陆用户信息 redis key login:user:admin #其它需要授权访问的接口,请求头需携带token #部门树形列表 部门可以设置为N级,后台使用递归将部门列表转换为树形列表 SysDepartmentServiceImpl @Override public List<SysDepartmentTreeVo> getAllDepartmentTree() { List<SysDepartment> sysDepartmentList = getAllDepartmentList(); if (CollectionUtils.isEmpty(sysDepartmentList)) { throw new IllegalArgumentException("SysDepartment列表不能为空"); } List<SysDepartmentTreeVo> list = SysDepartmentConvert.INSTANCE.listToTreeVoList(sysDepartmentList); List<SysDepartmentTreeVo> treeVos = new ArrayList<>(); for (SysDepartmentTreeVo treeVo : list) { if (treeVo.getParentId() == null) { treeVos.add(findChildren(treeVo, list)); } } return treeVos; } /** * 递归获取树形结果列表 * * @param tree * @param list * @return */ public SysDepartmentTreeVo findChildren(SysDepartmentTreeVo tree, List<SysDepartmentTreeVo> list) { for (SysDepartmentTreeVo vo : list) { if (tree.getId().equals(vo.getParentId())) { if (tree.getChildren() == null) { tree.setChildren(new ArrayList<>()); } tree.getChildren().add(findChildren(vo, list)); } } return tree; } 前端JSON结构 http://127.0.0.1:8888/sysDepartment/getAllDepartmentTree #角色管理 #设置角色权限 核心代码,删除角色权限,新增角色权限 求集合的差集 SysRolePermissionServiceImpl @Transactional(rollbackFor = Exception.class) @Override public boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception { Long roleId = updateSysRoleParam.getId(); List<Long> permissionIds = updateSysRoleParam.getPermissionIds(); // 校验角色是否存在 SysRole sysRole = getById(roleId); if (sysRole == null) { throw new BusinessException("该角色不存在"); } // 校验权限列表是否存在 if (!sysPermissionService.isExistsByPermissionIds(permissionIds)) { throw new BusinessException("权限列表id匹配失败"); } // 修改角色 sysRole.setName(updateSysRoleParam.getName()) .setType(updateSysRoleParam.getType()) .setRemark(updateSysRoleParam.getRemark()) .setState(updateSysRoleParam.getState()) .setUpdateTime(new Date()); boolean updateResult = updateById(sysRole); if (!updateResult) { throw new DaoException("修改系统角色失败"); } // 获取之前的权限id集合 List<Long> beforeList = sysRolePermissionService.getPermissionIdsByRoleId(roleId); // 差集计算 // before:1,2,3,4,5,6 // after: 1,2,3,4,7,8 // 删除5,6 新增7,8 // 此处真实删除,去掉deleted字段的@TableLogic注解 Set<Long> beforeSet = new HashSet<>(beforeList); Set<Long> afterSet = new HashSet<>(permissionIds); SetUtils.SetView deleteSet = SetUtils.difference(beforeSet, afterSet); SetUtils.SetView addSet = SetUtils.difference(afterSet, beforeSet); log.debug("deleteSet = " + deleteSet); log.debug("addSet = " + addSet); // 删除权限关联 UpdateWrapper updateWrapper = new UpdateWrapper(); updateWrapper.eq("role_id",roleId); updateWrapper.in("permission_id",deleteSet); boolean deleteResult = sysRolePermissionService.remove(updateWrapper); if (!deleteResult) { throw new DaoException("删除角色权限关系失败"); } // 新增权限关联 boolean addResult = sysRolePermissionService.saveSysRolePermissionBatch(roleId, addSet); if (!addResult) { throw new DaoException("新增角色权限关系失败"); } return true; } #权限管理 #权限树形列表 用户设置角色权限时,选择权限菜单 权限分为菜单和功能权限 后台获取三层权限树 @Override public List<SysPermissionTreeVo> getAllMenuTree() throws Exception { List<SysPermission> list = getAllMenuList(); // 转换成树形菜单 List<SysPermissionTreeVo> treeVos = convertSysPermissionTreeVoList(list); return treeVos; } @Override public List<SysPermissionTreeVo> convertSysPermissionTreeVoList(List<SysPermission> list) { if (CollectionUtils.isEmpty(list)) { throw new IllegalArgumentException("SysPermission列表不能为空"); } // 按level分组获取map Map<Integer, List<SysPermission>> map = list.stream().collect(Collectors.groupingBy(SysPermission::getLevel)); List<SysPermissionTreeVo> treeVos = new ArrayList<>(); // 循环获取三级菜单树形集合 for (SysPermission one : map.get(LevelEnum.ONE.getKey())) { SysPermissionTreeVo oneVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(one); Long oneParentId = oneVo.getParentId(); if (oneParentId == null || oneParentId == 0) { treeVos.add(oneVo); } List<SysPermission> twoList = map.get(LevelEnum.TWO.getKey()); if (CollectionUtils.isNotEmpty(twoList)) { for (SysPermission two : twoList) { SysPermissionTreeVo twoVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(two); if (two.getParentId().equals(one.getId())) { oneVo.getChildren().add(twoVo); } List<SysPermission> threeList = map.get(LevelEnum.THREE.getKey()); if (CollectionUtils.isNotEmpty(threeList)) { for (SysPermission three : threeList) { if (three.getParentId().equals(two.getId())) { SysPermissionTreeVo threeVo = SysPermissionConvert.INSTANCE.permissionToTreeVo(three); twoVo.getChildren().add(threeVo); } } } } } } return treeVos; } 前端JSON格式 http://127.0.0.1:8888/sysPermission/getAllMenuTree #权限编码列表 返回当前用户所有的权限编码,方便前端展示导航菜单和功能按钮 http://127.0.0.1:8888/sysPermission/getPermissionCodesByUserId/1 { "code": 200, "msg": "操作成功", "success": true, "data": [ "system:management", "system:management", "sys:user:management", "sys:user:management", "sys:role:management", "sys:permission:management", "sys:department:management", "sys:user:add", "sys:user:add", "sys:user:update", "sys:user:update", "sys:user:delete", "sys:user:delete", "sys:user:info", "sys:user:info", "sys:user:page", "sys:user:page", "sys:user:update:password", "sys:user:update:head", "sys:role:add", "sys:role:update", "sys:role:delete", "sys:role:info", "sys:role:page", "sys:permission:add", "sys:permission:update", "sys:permission:delete", "sys:permission:info", "sys:permission:page", "sys:permission:all:menu:list", "sys:permission:all:menu:tree", "sys:permission:menu:list", "sys:permission:menu:tree", "sys:permission:codes", "sys:department:update", "sys:department:delete", "sys:department:info", "sys:department:page" ], "time": "2019-11-02 00:32:17" } #注意 使用Shiro注解@RequiresPermissions进行controller方法权限过滤 @RequiresPermissions("sys:department:add") 生成代码时,可配置生成RequiresPermissions注解 // 是否生成Shiro RequiresPermissions注解 codeGenerator.setRequiresPermissions(true); 生成或新增的controller方法,需要进行权限管理,需要到sys_permission表新增权限编码记录,并给相应角色赋予权限

优秀的个人博客,低调大师

cf v0.4.3发布,lua 5.4 支持与一些细节优化

优化 优化admin库的一些实现代码与SQL语句; 优化包括login、dashboard、user、role、menu、header、profile的一些布局与显示问题; 修复 修复crypt在使用频繁情况下的tohex性能问题; 修复导入数据后字段描述的comment乱码的问题; 修复在docker内运行mysql:8的连接问题(详情看yaml文件); 编译 现在提供了clean与build脚本用来简化编译难度, 脚本内部注释描述了如何使用与依赖库. lua 5.4的支持 框架根据lua5.4beta版本API提供了兼容, 可自行编译测试. 在线文档 已经提供了完整的在线文档

优秀的个人博客,低调大师

spring-boot-plus1.1.0发布-集成Spring Boot Admin管理和监控应用

Spring Boot Admin Spring Boot Admin用来管理和监控Spring Boot应用程序应用程序向我们的Spring Boot Admin Client注册(通过HTTP)或使用SpringCloud®(例如Eureka,Consul)发现UI是Spring Boot Actuator端点上的Vue.js应用程序此项目中,Server和Client在一个项目中 Spring Boot Admin官方文档 Purpose 每个人都可以独立、快速、高效地开发项目! Everyone can develop projects independently, quickly and efficiently! 官网地址:springboot.plus GITHUB:https://github.com/geekidea/spring-boot-plus GITEE:https://gitee.com/geekidea/spring-boot-plus pom.xml依赖 spring boot admin版本声明,与spring boot版本保持一致 <spring-boot-admin.version>2.1.6</spring-boot-admin.version> 引入spring boot admin server <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>${spring-boot-admin.version}</version> </dependency> 引入spring boot admin client <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>${spring-boot-admin.version}</version> </dependency> 项目入口类注解配置 在入口类上标注@EnableAdminServer注解 @EnableAdminServer @SpringBootApplication public class SpringBootPlusApplication { ... } 配置文件 spring: boot: admin: client: url: 'http://localhost:8888' management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS url:spring boot admin访问路径,与当前项目访问路径一致 endpoints:spring boot健康检查、监控等,可配合spring boot admin使用 访问控制台 http://localhost:8888 Spring Boot Admin主界面 Spring Boot Admin Client展示面板 Spring Boot Admin 实例面板 Spring Boot Admin Monitor Spring Boot Admin 环境面板 Spring Boot Admin Beans面板 Spring Boot Admin 项目属性配置面板 Spring Boot Admin Loggers Spring Boot Admin 线程面板 Spring Boot Admin Controller映射面板 Spring Boot Admin Http调用链面板

优秀的个人博客,低调大师

中国移动云计算大会在苏州召开:大云4.0发布

8月23日-24日,第一届中国移动云计算大会在江苏苏州隆重召开。原信息产业部部长吴基传、江苏省省委常委、苏州市市委书记周乃翔、江苏省副省长马秋林,全国政协委员、中国移动通信集团公司原党组书记、董事长奚国华,中国移动通信集团公司党组成员、副总裁李正茂,以及来自IBM、Intel、甲骨文(Oracle)、VMWare、天睿Teradata、中国工商银行、华为、浪潮等600多位政府领导和行业专家参加了此次IT盛会。 中国移动在本次大会期间揭牌成立了云计算共创中心,携手华为、浪潮、Intel(中国)、IBM(中国)等国内外合作伙伴在开源发展、产品研发、解决方案提供、行业应用等方面共同打造云计算生态体系,利用云计算的技术、产品和理念,创新商业模式和运营模式,提升社会各行各业的IT体验和效率。 早在2007年,中国移动提出并开始实施大云计划,从2010年发布大云1.0到2015年发布大云3.0,大云产品已经在推动中国IT技术结构变革、支撑各行业企业智慧经营和服务提升方面做出了重要贡献。而随着中国移动提出“大连接”战略,着力于以信息化推动生产数字化,努力推动数字化社会进程,而新的时代对IT力量提出了新的要求。在本次大会上,中国移动正式发布大云4.0,秉持“新IT,全服务,大生态”的理念,融合云计算、大数据等技术,覆盖I/Re/S/M/A五层架构,实现大规模实例、多场景服务、跨行业应用,为各行业提供公有云、私有云、混合云、专有云、行业云总体解决方案,大云4.0主要包含云计算、大数据技术和平台产品,包括Hadoop系统、搜索引擎、Pass平台、大云数据中心操作系统等26项核心产品,实现在大IT技术架构下的全新平台、服务和生态构建能力。 大会期间,来自Intel、IBM、华为等100多名开源方面的专家参加了关于OpenStack生态的研讨。中国移动分享了在移动云等重大项目中的基于OpenStack的大规模应用与实践,为开源技术的大规模实践提供了重要的范本。中国移动一直以来坚持“开放合作、共享共赢”的发展理念,积极推进开源合作,在主流开源项目贡献显着,目前Openstack贡献全球41,SheepDog、PG-X2全球排名第1,Linux社区排名国内前五。在2016年OpenStack巴塞罗那峰会上,中国移动成功当选OpenStack黄金会员,并荣获OpenStack Superuser(超级用户)大奖,成为全球第五个、中国首个OpenStack Superuser。中国移动已成为云计算开源体系的积极贡献者。 这是一个瞬息万变的时代,云是万物智能的源泉。有分析显示,到2025年,所有企业信息技术解决方案都将实现云化,85%以上企业应用会被部署到云上,因此每个企业需要结合自身核心业务,探索最适合自己的云化解决方案。在本次大会上,中国移动面向政务、金融、教育等行业发布了一系列创新的云解决方案,帮助客户更好地推进企业应用向云迁移的进程,其中涵盖计算、存储、网络、安全、数据分析、数据库、开发测试、管理服务等层面,助力传统行业拥抱云,融入云。通过云驱动的技术和价值创新,企业的未来将迎来更智慧的决策、自动化的管理、敏捷的创新和开放的生态。 面向未来,中国移动将坚持以客户为中心,与产业合作伙伴一起致力于云计算的快速、健康发展,通过新型IT力量,不断挖掘数字化商业价值,加速数字化转型,为数字化时代提供发展新动力。 原文发布时间为: 2017年8月25日 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

优秀的个人博客,低调大师

大互联落地提速 新华三发布应用驱动园区网解决方案

当前“软件定义”已成为IT基础设施领域的普世概念,在6月2日举办的“2016 H3C Tech-Tour”技术巡展成都站上,新华三集团正式发布的应用驱动园区网(ADCampus)解决方案,成为了此概念的又一次成功落地。这是继2015年底新华三旗下华三通信发布大互联战略后推出的核心解决方案之一,籍此夯实了新华三大互联战略的加速落地。依托新IT技术与产品创新,新华三应用驱动园区网解决方案在园区网络部署、运维和创新等方面实现了一次大的“转身”,带动用户的网络建设进入一条新的发展轨迹。 引领园区网大变革 园区网可谓最基础的网络形态之一,如大学校园网、企业内部网等。经过多年发展,园区网的规模与业务都已经发生了巨大变化,移动终端、物联网等新的接入方式,对园区网络也提出更高要求。传统“人适应网”的园区网应用方式,面对当前人员变化频繁、应用大量增加、移动接入复杂等情况,网络僵化、位置绑定、运维复杂等短板显现无疑。 对此,华三通信国内市场部副总裁毕首文指出,从传统的人驱动网络,转变为应用驱动网络,最终实现智能驱动网络,是网络发展的必然轨迹。作为大互联Connect+落地的关键,新华三在新网络基础上,推出了应用驱动网络基础架构,来满足业务新常态带来的新需求,应用驱动园区网(ADCampus)解决方案就是其中针对园区网场景的具体实现。 相对于传统构建模式,新华三应用驱动园区网(ADCampus)解决方案有着十分显著的变化。ADCampus解决方案创新地引入了VXLAN+SDN的技术,通过构建基于VXLAN的新一代柔性园区基础网络,配合软件定义的相关理念,颠覆传统园区网“人适应网”的现状,实现整个园区网范围内“网随人动”。 打造网络创新“驱动器” 在具体实现上,应用驱动园区网解决方案由核心、汇聚、接入三层网络设备组成,外部搭配园区网驱动器(Campus Director)。在具备统一配置文件、无差别网络接入、安全资源集中部署、基于应用网络切片等特性的柔性网络基础上,园区网驱动器将网络的自动化上线、接入管理、用户组/策略管理、业务配置管理、网络运维等功能集成在一起,通过直观的图形化界面提供给管理员,并支撑上层多种业务应用系统。 对于用户来说,应用驱动园区网解决方案可以让管理员告别复杂的代码工作,所有操作都通过园区网驱动器后台转化为网络设备的具体命令下发给设备执行,大大降低了园区网运维难度。更重要的是,企业在不需要做任何网络配置调整、增加运维复杂度的基础上,让用户和终端可以在整个企业园区的任意角落移动,保持用户和终端始终处于既定的隔离网络、延续既定的网络策略,从而大大降低了园区运维的复杂度,满足移动化和物联网浪潮下对于园区网络新的诉求。 为此,新华三专门研发了相应的园区网驱动器DR2000。作为一款开创性的产品,DR2000可支持169个厂商设备,支持第三方APP的导入,Restful接口提供调度网络的能力,可帮助IT部门同时管理15000台网络设和10万个用户及终端。借助这一设备,企业可以轻松跨入新IT“快车道”,部署快、运维简、创新易的应用驱动园区网也得以轻松实现。 华三通信战略Marketing副总裁王玮表示,作为SDN技术的先行者和创新者,新华三拥有国内最大规模的行业用户群,积累了大量专业运维经验,此次推出应用驱动园区网解决方案可谓水到渠成。这是目前国内园区网建设领域的首创,也让新华三的创新实力展露无遗。 除了应用驱动园区网解决方案之外,此次主题为“新IT 新价值”的“2016 H3C Tech-Tour”技术巡展,还全面展示了新华三在大互联、云计算、大安全、大数据、新服务等方面的最近进展,在近一个月内30个省会级城市,向大家分享新华三的创新成果,感受“创新共享,智慧互联”的精彩世界。 本文转自d1net(转载)

优秀的个人博客,低调大师

新华三发布入门级存储产品

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 2016年9月14日,新华三在京召开主题为《超越存储,历久弥新》的产品发布会,在回顾新华三存储十七年来取得的成绩的基础上,推出了四款针对不同领域和行业的入门级存储新产品。新华三集团存储产品与解决方案事业部总经理黄强先生,IDC中国高级研究经理William-Zhang先生以及新华三集团存储产品***架构师张楠先生、新华三集团存储产品与解决方案事业部产品总监徐润安先生等高层参与了此次发布会并进行了相关内容的分享。 新华三集团存储产品与解决方案事业部总经理黄强先生 IDC中国高级研究经理William-Zhang先生 新华三集团存储产品与解决方案事业部产品总监徐润安先生 新华三集团存储产品***架构师张楠先生 本次主题为《超越存储,历久弥新》发布会,不管是形式还是内容都设计的比较新颖。发布会现场不仅有新华三存储的发展历程介绍展示,不同时期的产品介绍,新产品的讲解等等,而且还加入了经典影片的回顾环节,让到场的朋友真正重温了一把时代经典,勾起了人们的回忆。 活动开始后,新华三集团存储产品与解决方案事业部总经理黄强先生对新华三存储十七年来的成长历程进行了详细的介绍。从1999年***代MSA存储产品诞生,开启了主宰入门级存储市场的篇章。同年,LeftHand公司成立,具有线性扩展容量和性能优势的存储也开始研发;2002年,MSA成为双机高可靠的代名词;2009年收购LeftHand并发布业界首款软件定义存储产品;2010年收购3PAR存储,同年宣布超未来忆阻器计划;2012年,发布融合存储系列产品;2013年,发布基于闪存优化的3PAR全闪存阵列;2015年,推出全球首款企业级高端全闪存3PAR 产品。可以说,持续创新的基因已经融汇于新华三的血液中。黄强先生表示,十七年来,每一款惠普存储产品都取得了不俗的成绩。目前,MSA品牌入门级SAN存储的市场占有率已经取得了***名的成绩,3PAR品牌中端SAN存储产品的市场占有率也取得了***名的好成绩。 接下来,IDC中国高级研究经理William-Zhang先生分享了目前中国数字化转型过程中的一些重要数据。他表示,到2016年,超过70%的CIO将专注于为企业提供IT价值,而并非是维护工作。他强调,在数据化转型时代,选择合适的合作伙伴是关键,好的合作伙伴必须具备六大要素,分别是综合视野、行业经验、技术实力、创新能力、专注程度和生态系统。 本次发布会,共发布了四款新的产品,包括全新入门级存储MSA 2042和新一代灵活融合存储产品HPE SV3200 &CF3320两款存储产品和具备完全自主知识产权的新华三全新光纤交换机和可支持8.4PB容量的全新磁带库。H3C产品经理详细的介绍了各个产品的特点。StoreVirtual产品家族的***成员StoreVirtual 3200依然延续了软件定义DNA,更是在硬件架构上进行了全变革,提供了基于64位芯片技术的全新双存储控制器阵列、全新的RAID协议栈、瘦部署以及复制技术等,而全新的远程、基于云计算的分析功能内建***实践引擎以及性能规划工具,在降低管理复杂度的同时也降低了风险。MSA 系列产品是新华三入门级阵列旗舰产品,在标配的自动分层、数据保护、简便管理等强大功能基础上,***版本MSA 2042又增加了混合型闪存特性以提升应用的速度,产品的再次创新,使中小企业不再为成本与性能的取舍左右为难。 会议现场数据显示,十七年来有40万套MSA稳定运行在世界各地的企业数据中心内;StoreVirtual是集群入门级企业存储的中坚力量,这款拥有软件定义DNA的现代化共享存储平台产品在全球已有超过20万套。十七年来,新华三存储专注于持续创新——通过品质和价值传承与不断的创新,以稳定、可靠和丰富的入门级存储产品满足甚至往往超越客户的应用需求。放眼更多个十七年,依靠新华三“全球领先+本土创新”的整体实力,入门级存储会朝着更适应时代需求的方向迈进,未来发展机遇将更加不可限量。 【责任编辑: 张诚 TEL:(010)68476606】

优秀的个人博客,低调大师

从替代到超越,禅道国产化替代解决方案2.0发布!

3月22日,由禅道携手上海惠艾信息科技、麦哲思科技共同举办的禅道・中国行北京站活动圆满落下帷幕。 除深入探究AI赋能研发项目管理外,禅道在活动现场正式发布了《禅道国产化替代解决方案2.0》,助力企业全方位构建自主可控的研发项目管理新体系! 该方案基于当前行业对自主可控、安全可靠的国产化替代工具需求迫切的现状,在原有国产化替代解决方案1.0的基础上完成功能升级,精准聚焦解决企业在国产化替代进程中面临的关键难题——如何选择兼具数据迁移、工具适配、安全合规等全方位能力的研发管理工具。 【点击上图查看详细视频】 全新升级的《禅道国产化替代解决方案2.0》将为企业呈上一站式、全流程的研发项目管理国产化替代服务,助力企业顺利达成国产化转型,在自主可控、提高竞争力的道路上稳步迈进! 为积极响应国产化替代,全力加大对国产化替代工作的支持力度,禅道特别推出了“‘移’步抵万金”活动。 体验禅道带来的便捷与高效,感受全新的项目管理模式。别再让旧工具限制团队的发展,咨询禅道落地顾问,迈出项目管理升级的关键一步。 添加阿道vx:easycorp666备注【Jira迁移】咨询活动详情 一、《禅道国产化替代解决方案2.0》能解决什么问题 跨部门协作壁垒高、需求变更失控、进度监控盲区多、资源分配失衡、知识资产流失、工具生态碎片化……解决项目管理过程中的诸多问题; 解决管理工具不适配,企业无法落地的问题; 解决日常使用遇阻,无法高效协同的问题; 解决工具迁移时,如何保障业务连续运转的问题; 解决工具迁移时,如何实现海量历史数据保全的问题; 解决国产化替代如何实现本土化安全合规管理的问题。 二、为什么要选择禅道解决方案? 1. 16年坚守,有所不为更有所必为 禅道以用户至上的产品理念、价值与持续优化的功能,打造更适合中国企业的项目管理解决方案; 凭借极具性价比的产品价格和全方位、精细化的优质服务,全力释放企业管理效能; 依托自主可控的核心技术,构建高效、灵活、安全的管理平台,让每个企业都能享受到技术普惠; 用积极主动的姿态,助力信创生态发展,全面满足信创环境下的业务多样化需求。 2. 支持丝滑迁移,更懂国人管理习惯 功能与体验优化实现重大突破 功能层面 禅道国产化替代解决方案2.0不仅支持Jira项目、需求、任务、Bug等历史数据迁移至禅道,还额外支持Jira新增的Issue类型、自定义字段及Workflow迁移。同时,新增对Confluence数据迁移的支持,进一步拓展数据迁移覆盖范围,提供更加全面、高效的国产化替代服务。 体验层面 提升迁移交互体验,通过自动映射Jira内置功能字段,显著减少手动操作流程,让数据导入更加高效便捷。 全程自主迁移,一键丝滑搬家 为满足用户迁移业务流程的需要,禅道团队提供专用的解决方案与详尽的迁移手册。通过迁移手册,用户可自主完成“版本评估与选择——Jira/Confluence数据准备——导入禅道——导入成功”全流程,零门槛轻松实现稳定、丝滑搬家。 添加阿道vx:easycorp666,备注 【国产化替代】,获取解决方案或迁移手册! 100万+团队都在选择禅道,“移”步到位,完成安全、专业、丝滑的国产化替代!

优秀的个人博客,低调大师

易工具(yitool-cli)v1.0.3发布,npm 镜像地址切换,git 统计

易工具(yitool-cli) 易编程工作室出品 - 开发工具库 安装工具 安装 yitool npm install -g @yicode/yitool-cli 查看 git 统计 切换 npm 镜像地址 查看当前镜像地址 选择并切换镜像地址 开源仓库地址 易编程开源仓库(gitee) https://gitee.com/yicode-team 易编程开源仓库(github) https://github.com/yicode-team 项目截图一览 概述说明 yitool-cli 是一个用于增强开发体验和效率的工具库集合,旨在给开发者,带来方便。 使用声明 本项目使用 Apache 2.0 协议开源,不可商用出售,可免费无偿使用。 功能特性 更多功能,敬请期待,欢迎反馈! [x] git 项目提交统计 [x] 一键切换 npm 镜像

优秀的个人博客,低调大师

smart-mqtt v0.6发布,国产Java开源 MQTT Broker 服务器

smart-mqtt 是用 java 语言开发的 MQTT Broker 服务,也是 smartboot 组织下首款真正意义上面向物联网的解决方案。旨在帮助企业以较低的成本快速搭建稳定、可靠的物联网服务,助力万物互联互通。 一、更新内容 🎉 1.1 Features 🌈 应社区用户要求,开源版 smart-mqtt适配 JDK 回退至1.8。 完善retain消息的规范实现,当服务端接收到保留标志为 1 且有效载荷为零字节的 PUBLISH 报文时,该主题下任何现存的保留消息必须被移除。 优化日志输出格式,增加时间信息。 smart-mqtt broker 线程数支持配置化。 更新客户端connect鉴权的接口设计。 (by@yamikaze) 支持docker启动 smart-mqtt 服务 1.2 Bugfix 🛠 修复mqtt协议版本不兼容时引发的空指针问题。 修复订阅topic后retain消息被无限推送的问题。 1.3 文档 📘 Docker启动及交叉编译 社区行为规约 二、文档地址 语雀:https://www.yuque.com/smartboot/smart-mqtt/ 三、开源地址 Gitee(主站):https://gitee.com/smartboot/smart-mqtt GitHub(镜像同步):https://github.com/smartboot/smart-mqt 详情见:https://gitee.com/smartboot/smart-mqtt/releases/tag/v0.6

优秀的个人博客,低调大师

灯灯多租户快速开发平台 3.6.1发布,专注多租户解决方案

3.6.1 版本更新详情: build spring.boot.version>2.5.10 hutool.version>5.7.22 gateway.version>3.0.7 nacos.version>2.0.4 mysql.version>8.0.28 mybatis.version>3.5.9 mybatisplus.version>3.5.1 fix 升级gateway版本,修复 [CVE-2022-22947](https://tanzu.vmware.com/security/cve-2022-22947) 修复 因为升级mybatis plus导致的不兼容语法 《灯灯》中后台快速开发平台 lamp 项目组成 1) 工具集 ( lamp-util 项目必备,其他2个可选) 项目 gitee github 备注 工具集 lamp-util lamp-util 业务无关的工具集,cloud和boot 项目都依赖它 代码生成器 lamp-generator lamp-generator 给开发人员使用 定时调度器 lamp-job lamp-job 尚未开发 2) 后端 (下面2个项目功能一致,任选其一即可) 项目 gitee github 备注 微服务版 lamp-cloud lamp-cloud SpringCloud 版 单体版 lamp-boot lamp-boot SpringBoot 版(和lamp-cloud功能基本一致) 示例项目 lamp-samples lamp-samples 微服务版的示例功能 3) 前端 (下面3个项目功能一致,任选其一即可) 项目 gitee github 备注 租户后台 lamp-web lamp-web 基于vue-admin-element开发 (vue2.x) 租户后台 (强烈推荐!👏👏👏) lamp-web-plus lamp-web-plus 基于vue-vben-admin开发 (vue3.x) 如果你非要说 lamp 是 Linux+Apache+MySQL+PHP,那就算是吧,毕竟 PHP 是世界上最好的语言,我也希望此项目成为世界上最好的后台框架!😈😈😈 lamp-cloud 简介 lamp-cloud的前身是zuihou-admin-cloud,从3.0.0版本开始,改名为 lamp-cloud,它是lamp项目的其中一员。 lamp-cloud基于 jdk11/jdk8 +SpringCloud+ SpringCloudAlibaba+SpringBoot的微服务快速开发平台,其中的可配置的 SaaS 功能尤其闪耀, 具备 RBAC 功能、网关统一鉴权、Xss 防跨站攻击、自动代码生成、多种存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。代码简洁,注释齐全,架构清晰,非常适合学习和企业作为基础框架使用。 核心技术采用 Spring Cloud Alibaba、SpringBoot、Mybatis、Seata、Sentinel、RabbitMQ、FastDFS/MinIO、SkyWalking 等主要框架和中间件。 希望能努力打造一套从JavaWeb基础框架-分布式微服务架构-持续集成-系统监测的解决方案。本项目旨在实现基础能力,不涉及具体业务。 lamp 租户模式介绍 本项目可以通过配置,轻松切换项目的多租户实现方式。 租户模式 描述 优点 缺点 NONE (非租户模式) 没有租户 简单、适合独立系统 缺少租户系统的优点 COLUMN (字段模式) 租户共用一个数据库,在业务表中增加字段来区分 简单、不复杂、开发无感知 数据隔离性差、安全性差、数据备份和恢复困难、 SCHEMA (独立数据库) 每个租户独立一个 数据库(schema),执行 sql 时,动态在表名前增加 schema 简单、开发无感知、数据隔离性好 配置文件中必须配置数据库的 root 账号、不支持复杂 sql 和 sql 嵌套自定义函数 DATASOURCE (独立数据源) 每个租户独立一个数据源,执行代码时,动态切换数据源 可独立部署数据库,数据隔离性好、扩展性高、故障影响小 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 SCHEMA_COLUMN (独立数据库+字段模式) 每个租户独立一个 数据库,执行代码时,先动态切换数据源,在动态拼接 子租户id进行二次隔离 简单、开发无感知、数据隔离性好、支持大租户小门店形式 配置文件中必须配置数据库的 root 账号、不支持复杂 sql 和 sql 嵌套自定义函数 DATASOURCE_COLUMN (独立数据源+字段模式) 每个租户独立一个 数据库(数据源),执行代码时,动态切换数据源,在动态拼接 子租户id 二次隔离 可独立部署数据库,数据隔离性好、扩展性高、故障影响小、支持大租户小门店形式 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 lamp 项目演示地址 后端使用 lamp-cloud-plus,前端使用 lamp-web-plus。演示地址: https://tangyh.top 后端使用 lamp-cloud-plus,前端使用 lamp-web。演示地址: https://tangyh.top/lamp-web 后端使用 lamp-boot-plus, 前端使用 lamp-web-plus。演示地址: https://boot.tangyh.top 后端使用 lamp-boot-plus, 前端使用 lamp-web。演示地址: https://boot.tangyh.top/lamp-web 演示地址账号: 平台管理员: lamp_pt/lamp (内置给公司内部运营人员使用) 超级管理员: lamp/lamp 普通管理员: general/lamp 普通账号: normal/lamp ps: 演示环境中内置租户没有写入权限,若要在演示环境测试增删改,请使用 lamp_pt 账号查询租户管理员账号后,登录新租户测试 lamp-cloud 技术栈/版本介绍: 所涉及的相关的技术有: JSON序列化:Jackson 消息队列:RabbitMQ 缓存:Redis 数据库: MySQL 5.7.9 或者 MySQL 8.0.19 定时器:采用 xxl-jobs 项目进行二次改造 前端:vue + element-ui 持久层框架: Mybatis-plus 代码生成器:基于 Mybatis-plus-generator 自定义 API网关:Gateway/zuul 服务注册&发现和配置中心: Nacos 服务消费:OpenFeign 负载均衡:Ribbon 服务熔断:Hystrix 项目构建:Maven 分布式事务: seata 分布式系统的流量防卫兵: Sentinel 监控: spring-boot-admin 链路调用跟踪: zipkin/SkyWalking 文件服务器:FastDFS 5.0.5 / 阿里云OSS / 本地存储/MinIO Nginx 部署方面: 服务器:CentOS Jenkins Docker Kubernetes 项目截图: 预览 预览

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册