[{"documents":[{"i":1,"t":"标签","u":"/pangu-framework/admin/tags","b":[]},{"i":3,"t":"4 篇文档带有标签「盘古 Admin」","u":"/pangu-framework/admin/tags/盘古-admin","b":[]},{"i":5,"t":"1 篇文档带有标签「FAQ」","u":"/pangu-framework/admin/tags/faq","b":[]},{"i":7,"t":"1 篇文档带有标签「盘古 APP」","u":"/pangu-framework/app/tags/盘古-app","b":[]},{"i":9,"t":"标签","u":"/pangu-framework/app/tags","b":[]},{"i":11,"t":"3 篇文档带有标签「盘古 APP Starter」","u":"/pangu-framework/app/tags/盘古-app-starter","b":[]},{"i":13,"t":"盘古开发框架 | 开发者社区 | 微信交流群 | 作者Email","u":"/pangu-framework/community","b":[]},{"i":15,"t":"1 篇文档带有标签「部署」","u":"/pangu-framework/admin/tags/部署","b":[]},{"i":17,"t":"盘古开发框架简介","u":"/pangu-framework/intro","b":[]},{"i":19,"t":"1 篇文档带有标签「FAQ」","u":"/pangu-framework/app/tags/faq","b":[]},{"i":21,"t":"盘古 Admin :中后台业务系统二次开发脚手架","u":"/pangu-framework/online-demo","b":[]},{"i":23,"t":"盘古 APP : 移动端多平台快速开发脚手架","u":"/pangu-framework/online-demo-app","b":[]},{"i":25,"t":"致敬 & 鸣谢","u":"/pangu-framework/thanks","b":[]},{"i":27,"t":"日常开发常见问答","u":"/pangu-framework/admin/faq","b":[]},{"i":29,"t":"部署运维参考","u":"/pangu-framework/admin/deploy-admin","b":[]},{"i":31,"t":"搭建前端开发环境","u":"/pangu-framework/admin/how-to-create-frontend-environment","b":[]},{"i":33,"t":"搭建开发环境","u":"/pangu-framework/app/how-to-create-environment","b":[]},{"i":35,"t":"简介","u":"/pangu-framework/app/intro","b":[]},{"i":37,"t":"部署运维参考","u":"/pangu-framework/app/web-h5","b":[]},{"i":39,"t":"搭建后端开发环境","u":"/pangu-framework/admin/how-to-create-backend-environment","b":[]},{"i":41,"t":"快速入门指南","u":"/pangu-framework/app/quick-start","b":[]},{"i":43,"t":"数据治理之数据分片","u":"/pangu-framework/docs/advanced-guide/data-sharding","b":["服务开发","开发指南"]},{"i":85,"t":"新增业务功能模块","u":"/pangu-framework/admin/new-module","b":[]},{"i":87,"t":"日常开发常见问答","u":"/pangu-framework/app/faq","b":[]},{"i":89,"t":"简介","u":"/pangu-framework/admin/intro","b":[]},{"i":91,"t":"分布式锁","u":"/pangu-framework/docs/advanced-guide/distributed-lock","b":["服务开发","开发指南"]},{"i":111,"t":"分布式多级缓存","u":"/pangu-framework/docs/advanced-guide/layering-cache","b":["服务开发","开发指南"]},{"i":139,"t":"数据持久化","u":"/pangu-framework/docs/advanced-guide/data-persistance","b":["服务开发","开发指南"]},{"i":170,"t":"注册中心","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","b":["服务开发","开发指南"]},{"i":181,"t":"消息队列","u":"/pangu-framework/docs/advanced-guide/mq","b":["服务开发","开发指南"]},{"i":212,"t":"配置中心","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","b":["服务开发","开发指南"]},{"i":238,"t":"范例模版工程","u":"/pangu-framework/docs/examples-list","b":["服务开发","开发指南"]},{"i":246,"t":"部署相关","u":"/pangu-framework/docs/deploy-guide/basic","b":["服务开发","部署运维参考"]},{"i":255,"t":"代码生成器插件","u":"/pangu-framework/docs/code-generator","b":["服务开发","开发指南"]},{"i":272,"t":"日常开发常见问答","u":"/pangu-framework/docs/faq-service","b":["服务开发"]},{"i":276,"t":"简介","u":"/pangu-framework/docs/intro","b":["服务开发"]},{"i":289,"t":"分布式事务","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","b":["服务开发","开发指南"]},{"i":330,"t":"安装","u":"/pangu-framework/docs/install","b":["服务开发"]},{"i":354,"t":"开发架构模式对比","u":"/pangu-framework/docs/quick-start/how-to-make-architecture","b":["服务开发","快速开始"]},{"i":364,"t":"如何开发单体应用","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","b":["服务开发","快速开始"]},{"i":378,"t":"日志相关","u":"/pangu-framework/docs/deploy-guide/log","b":["服务开发","部署运维参考"]},{"i":390,"t":"如何基于微服务开发 Web 接口","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","b":["服务开发","快速开始"]},{"i":414,"t":"如何开发微服务应用","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","b":["服务开发","快速开始"]},{"i":433,"t":"数据治理之读写分离","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","b":["服务开发","开发指南"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,2.392]],["t/3",[0,1.251,1,2.553,2,1.453,3,1.453,4,1.453,5,1.345,6,2.17]],["t/5",[0,1.359,2,1.578,3,1.578,4,1.578,7,1.878,8,2.357]],["t/7",[0,1.251,2,1.453,3,1.453,4,1.453,5,1.345,7,1.729,9,1.917]],["t/9",[0,2.392]],["t/11",[0,1.159,2,1.346,3,1.346,4,1.346,5,1.246,9,1.776,10,2.365,11,2.365]],["t/13",[5,1.021,12,0.73,13,1.646,14,1.937,15,1.937,16,1.455,17,1.937,18,1.937,19,1.937,20,1.937,21,1.937]],["t/15",[0,1.359,2,1.578,3,1.578,4,1.578,7,1.878,22,1.878]],["t/17",[5,1.766,12,1.263,13,2.849,23,2.27]],["t/19",[0,1.359,2,1.578,3,1.578,4,1.578,7,1.878,8,2.357]],["t/21",[5,1.246,6,2.01,24,2.365,25,2.365,26,2.01,27,2.365,28,2.365,29,2.01]],["t/23",[5,1.161,9,1.654,12,0.83,29,1.872,30,2.203,31,1.872,32,2.203,33,2.203,34,1.872]],["t/25",[35,4.237,36,4.237]],["t/27",[12,1.263,37,2.518,38,2.518,39,2.518]],["t/29",[22,2.27,40,2.849,41,2.849,42,2.849]],["t/31",[43,2.811,44,3.744,45,2.811]],["t/33",[12,1.41,43,2.811,45,2.811]],["t/35",[23,3.305]],["t/37",[22,2.27,40,2.849,41,2.849,42,2.849]],["t/39",[12,1.263,31,2.849,43,2.518,45,2.518]],["t/41",[34,3.181,46,3.744,47,3.744]],["t/43",[48,3.477,49,2.849,50,3.353]],["t/85",[26,3.181,51,3.744,52,3.744]],["t/87",[12,1.263,37,2.518,38,2.518,39,2.518]],["t/89",[23,3.305]],["t/91",[53,3.182,54,4.237]],["t/111",[53,2.811,55,3.744,56,3.744]],["t/139",[48,2.811,57,3.744,58,3.744]],["t/170",[59,4.237,60,3.601]],["t/181",[61,4.237,62,4.237]],["t/212",[60,3.601,63,4.237]],["t/238",[64,3.744,65,3.744,66,3.744]],["t/246",[22,2.869,67,3.601]],["t/255",[68,3.744,69,3.744,70,3.744]],["t/272",[12,1.263,37,2.518,38,2.518,39,2.518]],["t/276",[23,3.305]],["t/289",[53,3.182,71,4.237]],["t/330",[72,4.881]],["t/354",[12,1.263,73,3.353,74,3.353,75,3.353]],["t/364",[12,1.263,76,2.518,77,3.353,78,2.849]],["t/378",[67,3.601,79,4.237]],["t/390",[12,0.962,16,1.917,76,1.917,80,2.553,81,2.17,82,2.553,83,2.553]],["t/414",[12,1.143,16,2.28,76,2.28,78,2.58,81,2.58]],["t/433",[48,2.518,49,2.849,84,3.353,85,3.353]]],"invertedIndex":[["1",{"_index":7,"t":{"5":{"position":[[0,1]]},"7":{"position":[[0,1]]},"15":{"position":[[0,1]]},"19":{"position":[[0,1]]}}}],["3",{"_index":10,"t":{"11":{"position":[[0,1]]}}}],["4",{"_index":1,"t":{"3":{"position":[[0,1]]}}}],["admin",{"_index":6,"t":{"3":{"position":[[13,5]]},"21":{"position":[[3,5]]}}}],["app",{"_index":9,"t":{"7":{"position":[[13,3]]},"11":{"position":[[13,3]]},"23":{"position":[[3,3]]}}}],["email",{"_index":21,"t":{"13":{"position":[[27,5]]}}}],["faq",{"_index":8,"t":{"5":{"position":[[10,3]]},"19":{"position":[[10,3]]}}}],["starter",{"_index":11,"t":{"11":{"position":[[17,7]]}}}],["web",{"_index":82,"t":{"390":{"position":[[10,3]]}}}],["业务",{"_index":26,"t":{"21":{"position":[[13,2]]},"85":{"position":[[2,2]]}}}],["中",{"_index":24,"t":{"21":{"position":[[10,1]]}}}],["中心",{"_index":60,"t":{"170":{"position":[[2,2]]},"212":{"position":[[2,2]]}}}],["事务",{"_index":71,"t":{"289":{"position":[[3,2]]}}}],["二次开发",{"_index":28,"t":{"21":{"position":[[17,4]]}}}],["交流",{"_index":18,"t":{"13":{"position":[[19,2]]}}}],["代码生成",{"_index":68,"t":{"255":{"position":[[0,4]]}}}],["作者",{"_index":20,"t":{"13":{"position":[[25,2]]}}}],["信",{"_index":17,"t":{"13":{"position":[[18,1]]}}}],["入门",{"_index":46,"t":{"41":{"position":[[2,2]]}}}],["分布式",{"_index":53,"t":{"91":{"position":[[0,3]]},"111":{"position":[[0,3]]},"289":{"position":[[0,3]]}}}],["分片",{"_index":50,"t":{"43":{"position":[[7,2]]}}}],["分离",{"_index":85,"t":{"433":{"position":[[7,2]]}}}],["前端开发",{"_index":44,"t":{"31":{"position":[[2,4]]}}}],["功能模块",{"_index":52,"t":{"85":{"position":[[4,4]]}}}],["化",{"_index":58,"t":{"139":{"position":[[4,1]]}}}],["单体",{"_index":77,"t":{"364":{"position":[[4,2]]}}}],["参考",{"_index":42,"t":{"29":{"position":[[4,2]]},"37":{"position":[[4,2]]}}}],["后台",{"_index":25,"t":{"21":{"position":[[11,2]]}}}],["器",{"_index":69,"t":{"255":{"position":[[4,1]]}}}],["基于",{"_index":80,"t":{"390":{"position":[[2,2]]}}}],["多",{"_index":32,"t":{"23":{"position":[[12,1]]}}}],["多级",{"_index":55,"t":{"111":{"position":[[3,2]]}}}],["如何",{"_index":76,"t":{"364":{"position":[[0,2]]},"390":{"position":[[0,2]]},"414":{"position":[[0,2]]}}}],["安装",{"_index":72,"t":{"330":{"position":[[0,2]]}}}],["对比",{"_index":75,"t":{"354":{"position":[[6,2]]}}}],["工程",{"_index":66,"t":{"238":{"position":[[4,2]]}}}],["带有",{"_index":4,"t":{"3":{"position":[[5,2]]},"5":{"position":[[5,2]]},"7":{"position":[[5,2]]},"11":{"position":[[5,2]]},"15":{"position":[[5,2]]},"19":{"position":[[5,2]]}}}],["常见",{"_index":38,"t":{"27":{"position":[[4,2]]},"87":{"position":[[4,2]]},"272":{"position":[[4,2]]}}}],["平台",{"_index":33,"t":{"23":{"position":[[13,2]]}}}],["应用",{"_index":78,"t":{"364":{"position":[[6,2]]},"414":{"position":[[7,2]]}}}],["开发",{"_index":12,"t":{"13":{"position":[[2,2]]},"17":{"position":[[2,2]]},"23":{"position":[[17,2]]},"27":{"position":[[2,2]]},"33":{"position":[[2,2]]},"39":{"position":[[4,2]]},"87":{"position":[[2,2]]},"272":{"position":[[2,2]]},"354":{"position":[[0,2]]},"364":{"position":[[2,2]]},"390":{"position":[[7,2]]},"414":{"position":[[2,2]]}}}],["开发者",{"_index":14,"t":{"13":{"position":[[9,3]]}}}],["微",{"_index":16,"t":{"13":{"position":[[17,1]]},"390":{"position":[[4,1]]},"414":{"position":[[4,1]]}}}],["快速",{"_index":34,"t":{"23":{"position":[[15,2]]},"41":{"position":[[0,2]]}}}],["持久",{"_index":57,"t":{"139":{"position":[[2,2]]}}}],["指南",{"_index":47,"t":{"41":{"position":[[4,2]]}}}],["接口",{"_index":83,"t":{"390":{"position":[[14,2]]}}}],["插件",{"_index":70,"t":{"255":{"position":[[5,2]]}}}],["搭建",{"_index":43,"t":{"31":{"position":[[0,2]]},"33":{"position":[[0,2]]},"39":{"position":[[0,2]]}}}],["数据",{"_index":48,"t":{"43":{"position":[[0,2],[5,2]]},"139":{"position":[[0,2]]},"433":{"position":[[0,2]]}}}],["文档",{"_index":3,"t":{"3":{"position":[[3,2]]},"5":{"position":[[3,2]]},"7":{"position":[[3,2]]},"11":{"position":[[3,2]]},"15":{"position":[[3,2]]},"19":{"position":[[3,2]]}}}],["新增",{"_index":51,"t":{"85":{"position":[[0,2]]}}}],["日常",{"_index":37,"t":{"27":{"position":[[0,2]]},"87":{"position":[[0,2]]},"272":{"position":[[0,2]]}}}],["日志",{"_index":79,"t":{"378":{"position":[[0,2]]}}}],["服务",{"_index":81,"t":{"390":{"position":[[5,2]]},"414":{"position":[[5,2]]}}}],["架构",{"_index":73,"t":{"354":{"position":[[2,2]]}}}],["标签",{"_index":0,"t":{"1":{"position":[[0,2]]},"3":{"position":[[7,2]]},"5":{"position":[[7,2]]},"7":{"position":[[7,2]]},"9":{"position":[[0,2]]},"11":{"position":[[7,2]]},"15":{"position":[[7,2]]},"19":{"position":[[7,2]]}}}],["框架",{"_index":13,"t":{"13":{"position":[[4,2]]},"17":{"position":[[4,2]]}}}],["模式",{"_index":74,"t":{"354":{"position":[[4,2]]}}}],["模版",{"_index":65,"t":{"238":{"position":[[2,2]]}}}],["治理",{"_index":49,"t":{"43":{"position":[[2,2]]},"433":{"position":[[2,2]]}}}],["注册",{"_index":59,"t":{"170":{"position":[[0,2]]}}}],["消息",{"_index":61,"t":{"181":{"position":[[0,2]]}}}],["环境",{"_index":45,"t":{"31":{"position":[[6,2]]},"33":{"position":[[4,2]]},"39":{"position":[[6,2]]}}}],["盘古",{"_index":5,"t":{"3":{"position":[[10,2]]},"7":{"position":[[10,2]]},"11":{"position":[[10,2]]},"13":{"position":[[0,2]]},"17":{"position":[[0,2]]},"21":{"position":[[0,2]]},"23":{"position":[[0,2]]}}}],["相关",{"_index":67,"t":{"246":{"position":[[2,2]]},"378":{"position":[[2,2]]}}}],["社区",{"_index":15,"t":{"13":{"position":[[12,2]]}}}],["移动",{"_index":30,"t":{"23":{"position":[[9,2]]}}}],["端",{"_index":31,"t":{"23":{"position":[[11,1]]},"39":{"position":[[3,1]]}}}],["简介",{"_index":23,"t":{"17":{"position":[[6,2]]},"35":{"position":[[0,2]]},"89":{"position":[[0,2]]},"276":{"position":[[0,2]]}}}],["篇",{"_index":2,"t":{"3":{"position":[[2,1]]},"5":{"position":[[2,1]]},"7":{"position":[[2,1]]},"11":{"position":[[2,1]]},"15":{"position":[[2,1]]},"19":{"position":[[2,1]]}}}],["系统",{"_index":27,"t":{"21":{"position":[[15,2]]}}}],["维",{"_index":41,"t":{"29":{"position":[[3,1]]},"37":{"position":[[3,1]]}}}],["缓存",{"_index":56,"t":{"111":{"position":[[5,2]]}}}],["群",{"_index":19,"t":{"13":{"position":[[21,1]]}}}],["脚手架",{"_index":29,"t":{"21":{"position":[[21,3]]},"23":{"position":[[19,3]]}}}],["致敬",{"_index":35,"t":{"25":{"position":[[0,2]]}}}],["范例",{"_index":64,"t":{"238":{"position":[[0,2]]}}}],["读写",{"_index":84,"t":{"433":{"position":[[5,2]]}}}],["运",{"_index":40,"t":{"29":{"position":[[2,1]]},"37":{"position":[[2,1]]}}}],["部署",{"_index":22,"t":{"15":{"position":[[10,2]]},"29":{"position":[[0,2]]},"37":{"position":[[0,2]]},"246":{"position":[[0,2]]}}}],["配置",{"_index":63,"t":{"212":{"position":[[0,2]]}}}],["锁",{"_index":54,"t":{"91":{"position":[[3,1]]}}}],["问答",{"_index":39,"t":{"27":{"position":[[6,2]]},"87":{"position":[[6,2]]},"272":{"position":[[6,2]]}}}],["队列",{"_index":62,"t":{"181":{"position":[[2,2]]}}}],["鸣谢",{"_index":36,"t":{"25":{"position":[[5,2]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":45,"t":"数据分片背景","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片背景","p":43},{"i":47,"t":"数据分片概念","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片概念","p":43},{"i":48,"t":"数据分片类型","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片类型","p":43},{"i":50,"t":"相关专业术语","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#相关专业术语","p":43},{"i":52,"t":"数据分片面临的挑战","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片面临的挑战","p":43},{"i":54,"t":"数据分片参考原则","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片参考原则","p":43},{"i":56,"t":"数据分片实现原理","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片实现原理","p":43},{"i":58,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#安装相关盘古模块","p":43},{"i":60,"t":"编程实战一:只分表","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#编程实战一只分表","p":43},{"i":61,"t":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境","p":43},{"i":63,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置","p":43},{"i":65,"t":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例","p":43},{"i":67,"t":"编程实战二:只分库","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#编程实战二只分库","p":43},{"i":68,"t":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境-1","p":43},{"i":70,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置-1","p":43},{"i":72,"t":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例-1","p":43},{"i":74,"t":"编程实战三:分库分表","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#编程实战三分库分表","p":43},{"i":75,"t":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境-2","p":43},{"i":77,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置-2","p":43},{"i":79,"t":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例-2","p":43},{"i":81,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本文相关范例源码","p":43},{"i":83,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#下一步","p":43},{"i":93,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#安装相关盘古模块","p":91},{"i":95,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#本地配置","p":91},{"i":97,"t":"基于注解声明","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#基于注解声明","p":91},{"i":99,"t":"@Lock4j","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#lock4j","p":91},{"i":101,"t":"代码片段","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#代码片段","p":91},{"i":103,"t":"基于 API 编程","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#基于-api-编程","p":91},{"i":105,"t":"启动入口","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#启动入口","p":91},{"i":107,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#本文相关范例源码","p":91},{"i":109,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#下一步","p":91},{"i":113,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#安装相关盘古模块","p":111},{"i":115,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#本地配置","p":111},{"i":117,"t":"关键配置项说明","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#关键配置项说明","p":111},{"i":119,"t":"基于注解声明","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#基于注解声明","p":111},{"i":121,"t":"@FirstCache","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#firstcache","p":111},{"i":123,"t":"@SecondaryCache","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#secondarycache","p":111},{"i":125,"t":"@Cacheable","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheable","p":111},{"i":127,"t":"@CachePut","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheput","p":111},{"i":129,"t":"@CacheEvict","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheevict","p":111},{"i":131,"t":"基于 API 编程","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#基于-api-编程","p":111},{"i":133,"t":"启动入口","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#启动入口","p":111},{"i":135,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#本文相关范例源码","p":111},{"i":137,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#下一步","p":111},{"i":141,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#安装相关盘古模块","p":139},{"i":143,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#本地配置","p":139},{"i":145,"t":"生成持久化所需的模版代码","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#生成持久化所需的模版代码","p":139},{"i":147,"t":"基本数据持久化操作","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#基本数据持久化操作","p":139},{"i":149,"t":"新增","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#新增","p":139},{"i":151,"t":"修改","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#修改","p":139},{"i":153,"t":"删除","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#删除","p":139},{"i":155,"t":"简单查询","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#简单查询","p":139},{"i":157,"t":"分页查询","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#分页查询","p":139},{"i":159,"t":"手工编写SQL映射","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#手工编写sql映射","p":139},{"i":161,"t":"高级特性","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#高级特性","p":139},{"i":162,"t":"事务","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#事务","p":139},{"i":164,"t":"逻辑删除","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#逻辑删除","p":139},{"i":166,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#本文相关范例源码","p":139},{"i":168,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#下一步","p":139},{"i":172,"t":"注册中心介绍","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","h":"#注册中心介绍","p":170},{"i":174,"t":"相关名词解释","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","h":"#相关名词解释","p":170},{"i":176,"t":"注册中心图示","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","h":"#注册中心图示","p":170},{"i":177,"t":"注册中心实战","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","h":"#注册中心实战","p":170},{"i":179,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/nacos-regist-center","h":"#下一步","p":170},{"i":183,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/mq","h":"#安装相关盘古模块","p":181},{"i":185,"t":"队列规划","u":"/pangu-framework/docs/advanced-guide/mq","h":"#队列规划","p":181},{"i":187,"t":"图示说明","u":"/pangu-framework/docs/advanced-guide/mq","h":"#图示说明","p":181},{"i":189,"t":"创建队列","u":"/pangu-framework/docs/advanced-guide/mq","h":"#创建队列","p":181},{"i":191,"t":"消息生产者","u":"/pangu-framework/docs/advanced-guide/mq","h":"#消息生产者","p":181},{"i":192,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/mq","h":"#本地配置","p":181},{"i":194,"t":"消息发送代码","u":"/pangu-framework/docs/advanced-guide/mq","h":"#消息发送代码","p":181},{"i":196,"t":"消息消费者","u":"/pangu-framework/docs/advanced-guide/mq","h":"#消息消费者","p":181},{"i":197,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/mq","h":"#本地配置-1","p":181},{"i":199,"t":"消息监听代码","u":"/pangu-framework/docs/advanced-guide/mq","h":"#消息监听代码","p":181},{"i":201,"t":"测试","u":"/pangu-framework/docs/advanced-guide/mq","h":"#测试","p":181},{"i":202,"t":"消费者:启动消费监听程序","u":"/pangu-framework/docs/advanced-guide/mq","h":"#消费者启动消费监听程序","p":181},{"i":204,"t":"生产者:执行测试用例发送消息","u":"/pangu-framework/docs/advanced-guide/mq","h":"#生产者执行测试用例发送消息","p":181},{"i":206,"t":"测试结果截图","u":"/pangu-framework/docs/advanced-guide/mq","h":"#测试结果截图","p":181},{"i":208,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/mq","h":"#本文相关范例源码","p":181},{"i":210,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/mq","h":"#下一步","p":181},{"i":214,"t":"配置中心介绍","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#配置中心介绍","p":212},{"i":216,"t":"相关名词解释","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#相关名词解释","p":212},{"i":218,"t":"本地配置与配置中心对比","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#本地配置与配置中心对比","p":212},{"i":220,"t":"配置中心实战","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#配置中心实战","p":212},{"i":222,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#安装相关盘古模块","p":212},{"i":224,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#本地配置","p":212},{"i":226,"t":"配置中心配置","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#配置中心配置","p":212},{"i":228,"t":"启动入口","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#启动入口","p":212},{"i":230,"t":"使用配置","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#使用配置","p":212},{"i":232,"t":"彩蛋:基于配置中心的日志级别热切换","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#彩蛋基于配置中心的日志级别热切换","p":212},{"i":234,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#本文相关范例源码","p":212},{"i":236,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/nacos-config-center","h":"#下一步","p":212},{"i":240,"t":"模块目录说明","u":"/pangu-framework/docs/examples-list","h":"#模块目录说明","p":238},{"i":242,"t":"获取范例代码","u":"/pangu-framework/docs/examples-list","h":"#获取范例代码","p":238},{"i":244,"t":"下一步","u":"/pangu-framework/docs/examples-list","h":"#下一步","p":238},{"i":247,"t":"打包脚本","u":"/pangu-framework/docs/deploy-guide/basic","h":"#打包脚本","p":246},{"i":249,"t":"启动脚本","u":"/pangu-framework/docs/deploy-guide/basic","h":"#启动脚本","p":246},{"i":251,"t":"参考部署架构","u":"/pangu-framework/docs/deploy-guide/basic","h":"#参考部署架构","p":246},{"i":253,"t":"下一步","u":"/pangu-framework/docs/deploy-guide/basic","h":"#下一步","p":246},{"i":257,"t":"安装 Maven 插件","u":"/pangu-framework/docs/code-generator","h":"#安装-maven-插件","p":255},{"i":259,"t":"插件参数说明","u":"/pangu-framework/docs/code-generator","h":"#插件参数说明","p":255},{"i":261,"t":"运行Maven插件","u":"/pangu-framework/docs/code-generator","h":"#运行maven插件","p":255},{"i":262,"t":"方式一","u":"/pangu-framework/docs/code-generator","h":"#方式一","p":255},{"i":264,"t":"方式二","u":"/pangu-framework/docs/code-generator","h":"#方式二","p":255},{"i":266,"t":"输出结果","u":"/pangu-framework/docs/code-generator","h":"#输出结果","p":255},{"i":268,"t":"本文相关范例源码","u":"/pangu-framework/docs/code-generator","h":"#本文相关范例源码","p":255},{"i":270,"t":"下一步","u":"/pangu-framework/docs/code-generator","h":"#下一步","p":255},{"i":274,"t":"下一步","u":"/pangu-framework/docs/faq-service","h":"#下一步","p":272},{"i":278,"t":"设计原则","u":"/pangu-framework/docs/intro","h":"#设计原则","p":276},{"i":280,"t":"生态架构图","u":"/pangu-framework/docs/intro","h":"#生态架构图","p":276},{"i":281,"t":"主要功能","u":"/pangu-framework/docs/intro","h":"#主要功能","p":276},{"i":283,"t":"组件依赖","u":"/pangu-framework/docs/intro","h":"#组件依赖","p":276},{"i":285,"t":"模块列表","u":"/pangu-framework/docs/intro","h":"#模块列表","p":276},{"i":287,"t":"下一步","u":"/pangu-framework/docs/intro","h":"#下一步","p":276},{"i":291,"t":"事务概念","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#事务概念","p":289},{"i":293,"t":"分布式事务概念","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#分布式事务概念","p":289},{"i":295,"t":"Seata 分布式事务框架","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#seata-分布式事务框架","p":289},{"i":297,"t":"Seata 专业术语","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#seata-专业术语","p":289},{"i":299,"t":"Seata 分布式事务模型","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#seata-分布式事务模型","p":289},{"i":301,"t":"AT 模式","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#at-模式","p":289},{"i":303,"t":"TCC 模式","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#tcc-模式","p":289},{"i":305,"t":"其它模式","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#其它模式","p":289},{"i":307,"t":"虚拟业务场景设计","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#虚拟业务场景设计","p":289},{"i":309,"t":"编程实战(AT 模式)","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#编程实战at-模式","p":289},{"i":311,"t":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#初始化数据库环境","p":289},{"i":313,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#安装相关盘古模块","p":289},{"i":315,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#本地配置","p":289},{"i":317,"t":"主要业务逻辑","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#主要业务逻辑","p":289},{"i":319,"t":"测试","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#测试","p":289},{"i":320,"t":"启动 Seata 服务端( TC )","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#启动-seata-服务端-tc-","p":289},{"i":322,"t":"启动微服务","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#启动微服务","p":289},{"i":324,"t":"执行测试用例","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#执行测试用例","p":289},{"i":326,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#本文相关范例源码","p":289},{"i":328,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/distributed-transaction","h":"#下一步","p":289},{"i":332,"t":"依赖管理模块","u":"/pangu-framework/docs/install","h":"#依赖管理模块","p":330},{"i":334,"t":"基础模块","u":"/pangu-framework/docs/install","h":"#基础模块","p":330},{"i":336,"t":"Dubbo模块","u":"/pangu-framework/docs/install","h":"#dubbo模块","p":330},{"i":338,"t":"JDBC模块","u":"/pangu-framework/docs/install","h":"#jdbc模块","p":330},{"i":340,"t":"分布式事务管理模块","u":"/pangu-framework/docs/install","h":"#分布式事务管理模块","p":330},{"i":342,"t":"数据治理模块","u":"/pangu-framework/docs/install","h":"#数据治理模块","p":330},{"i":344,"t":"缓存模块","u":"/pangu-framework/docs/install","h":"#缓存模块","p":330},{"i":346,"t":"消息队列模块","u":"/pangu-framework/docs/install","h":"#消息队列模块","p":330},{"i":348,"t":"Web模块","u":"/pangu-framework/docs/install","h":"#web模块","p":330},{"i":350,"t":"代码生成插件","u":"/pangu-framework/docs/install","h":"#代码生成插件","p":330},{"i":352,"t":"下一步","u":"/pangu-framework/docs/install","h":"#下一步","p":330},{"i":356,"t":"写在前面","u":"/pangu-framework/docs/quick-start/how-to-make-architecture","h":"#写在前面","p":354},{"i":358,"t":"单体分层架构 VS 微服务分布式架构","u":"/pangu-framework/docs/quick-start/how-to-make-architecture","h":"#单体分层架构-vs-微服务分布式架构","p":354},{"i":360,"t":"盘古开发架构选型建议","u":"/pangu-framework/docs/quick-start/how-to-make-architecture","h":"#盘古开发架构选型建议","p":354},{"i":362,"t":"下一步","u":"/pangu-framework/docs/quick-start/how-to-make-architecture","h":"#下一步","p":354},{"i":366,"t":"背景","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#背景","p":364},{"i":368,"t":"安装相关盘古模块","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#安装相关盘古模块","p":364},{"i":370,"t":"本地配置","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#本地配置","p":364},{"i":372,"t":"启动入口","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#启动入口","p":364},{"i":374,"t":"本文相关范例源码","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#本文相关范例源码","p":364},{"i":376,"t":"下一步","u":"/pangu-framework/docs/quick-start/how-to-make-monomer-architecture-app","h":"#下一步","p":364},{"i":380,"t":"分布式日志追踪","u":"/pangu-framework/docs/deploy-guide/log","h":"#分布式日志追踪","p":378},{"i":382,"t":"如何使用","u":"/pangu-framework/docs/deploy-guide/log","h":"#如何使用","p":378},{"i":384,"t":"实际日志输出效果","u":"/pangu-framework/docs/deploy-guide/log","h":"#实际日志输出效果","p":378},{"i":386,"t":"日志级别热切换","u":"/pangu-framework/docs/deploy-guide/log","h":"#日志级别热切换","p":378},{"i":388,"t":"下一步","u":"/pangu-framework/docs/deploy-guide/log","h":"#下一步","p":378},{"i":392,"t":"技术实现方案","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#技术实现方案","p":390},{"i":394,"t":"基于 Spring RestController 的接口调用模式","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#基于-spring-restcontroller-的接口调用模式","p":390},{"i":396,"t":"基于 ShenYu 网关的泛化调用模式","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#基于-shenyu-网关的泛化调用模式","p":390},{"i":398,"t":"编程实战一:基于 Spring RestController 的接口调用模式","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#编程实战一基于-spring-restcontroller-的接口调用模式","p":390},{"i":400,"t":"安装相关盘古模块","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#安装相关盘古模块","p":390},{"i":402,"t":"本地配置","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#本地配置","p":390},{"i":404,"t":"调用微服务接口","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#调用微服务接口","p":390},{"i":406,"t":"启动入口","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#启动入口","p":390},{"i":408,"t":"本范例源码","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#本范例源码","p":390},{"i":410,"t":"编程实战二:基于 ShenYu 网关的泛化调用模式","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#编程实战二基于-shenyu-网关的泛化调用模式","p":390},{"i":412,"t":"下一步","u":"/pangu-framework/docs/quick-start/how-to-create-http-api","h":"#下一步","p":390},{"i":416,"t":"服务提供者","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#服务提供者","p":414},{"i":417,"t":"安装相关盘古模块","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#安装相关盘古模块","p":414},{"i":419,"t":"本地配置","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#本地配置","p":414},{"i":421,"t":"实现服务接口","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#实现服务接口","p":414},{"i":423,"t":"启动入口","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#启动入口","p":414},{"i":425,"t":"服务注册","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#服务注册","p":414},{"i":427,"t":"服务消费者","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#服务消费者","p":414},{"i":429,"t":"本文相关范例源码","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#本文相关范例源码","p":414},{"i":431,"t":"下一步","u":"/pangu-framework/docs/quick-start/how-to-make-microservice-architecture-app","h":"#下一步","p":414},{"i":435,"t":"读写分离概念","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#读写分离概念","p":433},{"i":437,"t":"读写分离后面临的问题","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#读写分离后面临的问题","p":433},{"i":439,"t":"相关专业术语","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#相关专业术语","p":433},{"i":441,"t":"读写分离实现原理","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#读写分离实现原理","p":433},{"i":443,"t":"编程实战","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#编程实战","p":433},{"i":445,"t":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#初始化数据库环境","p":433},{"i":447,"t":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#安装相关盘古模块","p":433},{"i":449,"t":"本地配置","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#本地配置","p":433},{"i":451,"t":"测试用例","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#测试用例","p":433},{"i":452,"t":"启动类","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#启动类","p":433},{"i":454,"t":"测试写操作自动走主库","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#测试写操作自动走主库","p":433},{"i":456,"t":"测试读操作自动走从库负载均衡","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#测试读操作自动走从库负载均衡","p":433},{"i":458,"t":"测试读操作强制走主库","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#测试读操作强制走主库","p":433},{"i":460,"t":"测试事务方法自动走主库","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#测试事务方法自动走主库","p":433},{"i":462,"t":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#本文相关范例源码","p":433},{"i":464,"t":"下一步","u":"/pangu-framework/docs/advanced-guide/readwrite-splitting","h":"#下一步","p":433}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/45",[0,3.033,1,3.292,2,4.214]],["t/47",[0,3.033,1,3.292,3,3.647]],["t/48",[0,3.033,1,3.292,4,4.707]],["t/50",[5,2.259,6,4.539]],["t/52",[0,2.653,1,2.879,7,3.686,8,4.117]],["t/54",[0,2.653,1,2.879,9,3.686,10,3.686]],["t/56",[0,2.653,1,2.879,11,3.19,12,3.686]],["t/58",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/60",[16,2.926,17,2.926,18,4.214]],["t/61",[19,3.453,20,3.453,21,3.453]],["t/63",[22,2.863,23,2.495]],["t/65",[24,4.614]],["t/67",[16,2.559,17,2.559,25,3.402,26,3.686]],["t/68",[19,3.453,20,3.453,21,3.453]],["t/70",[22,2.863,23,2.495]],["t/72",[24,4.614]],["t/74",[16,2.274,17,2.274,18,3.275,26,3.275,27,3.658]],["t/75",[19,3.453,20,3.453,21,3.453]],["t/77",[22,2.863,23,2.495]],["t/79",[24,4.614]],["t/81",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/83",[31,3.06]],["t/93",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/95",[22,2.863,23,2.495]],["t/97",[32,2.926,33,4.214,34,4.214]],["t/99",[35,6.597]],["t/101",[36,4.03,37,5.494]],["t/103",[16,2.926,32,2.926,38,4.214]],["t/105",[39,3.2,40,3.842]],["t/107",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/109",[31,3.06]],["t/113",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/115",[22,2.863,23,2.495]],["t/117",[23,1.87,41,4.117,42,4.117,43,3.19]],["t/119",[32,2.926,33,4.214,34,4.214]],["t/121",[44,6.597]],["t/123",[45,6.597]],["t/125",[46,6.597]],["t/127",[47,6.597]],["t/129",[48,6.597]],["t/131",[16,2.926,32,2.926,38,4.214]],["t/133",[39,3.2,40,3.842]],["t/135",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/137",[31,3.06]],["t/141",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/143",[22,2.863,23,2.495]],["t/145",[36,2.415,49,3.292,50,2.947,51,2.947,52,3.292,53,3.292]],["t/147",[0,2.357,50,3.275,51,3.275,54,3.658,55,2.834]],["t/149",[56,6.597]],["t/151",[57,6.597]],["t/153",[58,5.906]],["t/155",[59,5.494,60,4.918]],["t/157",[60,4.918,61,5.494]],["t/159",[62,4.117,63,4.117,64,4.117,65,4.117]],["t/161",[66,5.494,67,5.494]],["t/162",[68,4.614]],["t/164",[58,4.918,69,4.918]],["t/166",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/168",[31,3.06]],["t/172",[70,3.647,71,3.033,72,4.214]],["t/174",[5,2.259,73,4.918]],["t/176",[70,3.647,71,3.033,74,4.214]],["t/177",[17,2.926,70,3.647,71,3.033]],["t/179",[31,3.06]],["t/183",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/185",[75,4.539,76,5.494]],["t/187",[43,4.256,74,4.918]],["t/189",[75,4.539,77,5.494]],["t/191",[78,3.842,79,4.918]],["t/192",[22,2.863,23,2.495]],["t/194",[36,3.453,78,3.292,80,4.214]],["t/196",[78,3.842,81,4.539]],["t/197",[22,2.863,23,2.495]],["t/199",[36,3.453,78,3.292,82,4.214]],["t/201",[83,4.42]],["t/202",[39,2.131,81,3.023,82,3.275,84,3.658,85,3.658]],["t/204",[24,2.559,78,2.559,79,3.275,80,3.275,86,3.275]],["t/206",[83,3.154,87,4.214,88,4.707]],["t/208",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/210",[31,3.06]],["t/214",[23,2.137,71,3.033,72,4.214]],["t/216",[5,2.259,73,4.918]],["t/218",[22,1.907,23,2.478,71,2.357,89,3.658]],["t/220",[17,2.926,23,2.137,71,3.033]],["t/222",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/224",[22,2.863,23,2.495]],["t/226",[23,2.972,71,3.033]],["t/228",[39,3.2,40,3.842]],["t/230",[23,2.495,90,4.918]],["t/232",[23,1.245,32,1.704,71,1.767,91,2.742,92,2.125,93,2.455,94,2.455,95,2.455]],["t/234",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/236",[31,3.06]],["t/240",[15,2.094,43,3.647,96,4.707]],["t/242",[29,2.586,36,3.453,97,4.707]],["t/244",[31,3.06]],["t/247",[98,5.494,99,4.918]],["t/249",[39,3.2,99,4.918]],["t/251",[9,4.214,100,4.707,101,3.889]],["t/253",[31,3.06]],["t/257",[13,2.661,102,4.214,103,3.647]],["t/259",[43,3.647,103,3.647,104,4.707]],["t/261",[102,4.214,103,3.647,105,4.707]],["t/262",[106,5.906]],["t/264",[25,4.539,106,4.918]],["t/266",[87,4.918,107,4.918]],["t/268",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/270",[31,3.06]],["t/274",[31,3.06]],["t/278",[10,4.918,108,4.918]],["t/280",[109,5.494,110,5.494]],["t/281",[111,4.918,112,5.494]],["t/283",[113,5.494,114,4.918]],["t/285",[15,2.444,115,5.494]],["t/287",[31,3.06]],["t/291",[3,4.256,68,3.842]],["t/293",[3,3.647,68,3.292,116,3.292]],["t/295",[68,2.879,116,2.879,117,3.19,118,4.117]],["t/297",[6,4.539,117,4.256]],["t/299",[68,2.879,116,2.879,117,3.19,119,4.117]],["t/301",[120,4.251]],["t/303",[120,3.54,121,5.494]],["t/305",[120,3.54,122,5.494]],["t/307",[108,3.686,123,4.117,124,3.686,125,4.117]],["t/309",[16,2.926,17,2.926,120,3.033]],["t/311",[19,3.453,20,3.453,21,3.453]],["t/313",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/315",[22,2.863,23,2.495]],["t/317",[69,4.214,111,4.214,124,4.214]],["t/319",[83,4.42]],["t/320",[39,2.398,117,3.19,126,4.117,127,4.117]],["t/322",[39,2.741,128,3.889,129,3.292]],["t/324",[24,3.842,86,4.918]],["t/326",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/328",[31,3.06]],["t/332",[15,2.094,114,4.214,130,4.707]],["t/334",[15,2.444,131,5.494]],["t/336",[15,2.444,132,5.494]],["t/338",[15,2.444,133,5.494]],["t/340",[15,2.094,116,3.292,134,4.707]],["t/342",[0,3.033,15,2.094,135,4.707]],["t/344",[15,2.444,136,5.494]],["t/346",[15,2.094,75,3.889,78,3.292]],["t/348",[15,2.444,137,5.494]],["t/350",[103,4.256,138,5.494]],["t/352",[31,3.06]],["t/356",[139,4.918,140,5.494]],["t/358",[101,3.609,116,1.918,128,2.266,129,1.918,141,2.742,142,2.742,143,2.742]],["t/360",[14,2.068,101,3.023,144,3.658,145,3.658,146,3.658]],["t/362",[31,3.06]],["t/366",[2,5.906]],["t/368",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/370",[22,2.863,23,2.495]],["t/372",[39,3.2,40,3.842]],["t/374",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/376",[31,3.06]],["t/380",[92,3.647,116,3.292,147,4.707]],["t/382",[90,4.918,148,5.494]],["t/384",[92,3.19,107,3.686,149,4.117,150,4.117]],["t/386",[92,3.19,93,3.686,94,3.686,95,3.686]],["t/388",[31,3.06]],["t/392",[11,3.647,151,4.707,152,4.707]],["t/394",[32,2.046,120,2.121,153,2.947,154,2.947,155,2.55,156,2.415]],["t/396",[32,2.046,120,2.121,156,2.415,157,2.947,158,2.947,159,2.947]],["t/398",[16,1.704,17,1.704,32,1.704,120,1.767,153,2.455,154,2.455,155,2.125,156,2.012]],["t/400",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/402",[22,2.863,23,2.495]],["t/404",[128,3.402,129,2.879,155,3.19,156,3.02]],["t/406",[39,3.2,40,3.842]],["t/408",[29,2.586,30,2.661,160,4.707]],["t/410",[16,1.573,17,1.573,25,2.091,32,1.573,120,1.631,156,1.857,157,2.266,158,2.266,159,2.266]],["t/412",[31,3.06]],["t/416",[161,6.597]],["t/417",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/419",[22,2.863,23,2.495]],["t/421",[11,3.647,129,3.292,155,3.647]],["t/423",[39,3.2,40,3.842]],["t/425",[70,4.256,129,3.842]],["t/427",[81,4.539,129,3.842]],["t/429",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/431",[31,3.06]],["t/435",[3,3.647,162,3.889,163,3.889]],["t/437",[7,3.686,162,3.402,163,3.402,164,4.117]],["t/439",[5,2.259,6,4.539]],["t/441",[11,3.19,12,3.686,162,3.402,163,3.402]],["t/443",[16,3.415,17,3.415]],["t/445",[19,3.453,20,3.453,21,3.453]],["t/447",[5,1.693,13,2.327,14,2.327,15,1.831]],["t/449",[22,2.863,23,2.495]],["t/451",[24,4.614]],["t/452",[39,3.2,165,5.494]],["t/454",[55,2.55,83,2.206,139,2.947,166,2.72,167,2.55,168,2.72]],["t/456",[55,2.125,83,1.837,166,2.266,167,2.125,169,2.455,170,2.742,171,2.742,172,2.742]],["t/458",[55,2.55,83,2.206,167,2.55,168,2.72,169,2.947,173,3.292]],["t/460",[68,2.302,83,2.206,166,2.72,167,2.55,168,2.72,174,3.292]],["t/462",[5,1.693,28,2.398,29,2.262,30,2.327]],["t/464",[31,3.06]]],"invertedIndex":[["api",{"_index":38,"t":{"103":{"position":[[3,3]]},"131":{"position":[[3,3]]}}}],["cacheabl",{"_index":46,"t":{"125":{"position":[[1,9]]}}}],["cacheevict",{"_index":48,"t":{"129":{"position":[[1,10]]}}}],["cacheput",{"_index":47,"t":{"127":{"position":[[1,8]]}}}],["dubbo",{"_index":132,"t":{"336":{"position":[[0,5]]}}}],["firstcach",{"_index":44,"t":{"121":{"position":[[1,10]]}}}],["jdbc",{"_index":133,"t":{"338":{"position":[[0,4]]}}}],["lock4j",{"_index":35,"t":{"99":{"position":[[1,6]]}}}],["maven",{"_index":102,"t":{"257":{"position":[[3,5]]},"261":{"position":[[2,5]]}}}],["restcontrol",{"_index":154,"t":{"394":{"position":[[10,14]]},"398":{"position":[[16,14]]}}}],["seata",{"_index":117,"t":{"295":{"position":[[0,5]]},"297":{"position":[[0,5]]},"299":{"position":[[0,5]]},"320":{"position":[[3,5]]}}}],["secondarycach",{"_index":45,"t":{"123":{"position":[[1,14]]}}}],["shenyu",{"_index":157,"t":{"396":{"position":[[3,6]]},"410":{"position":[[9,6]]}}}],["spring",{"_index":153,"t":{"394":{"position":[[3,6]]},"398":{"position":[[9,6]]}}}],["sql",{"_index":64,"t":{"159":{"position":[[4,3]]}}}],["tc",{"_index":127,"t":{"320":{"position":[[14,2]]}}}],["tcc",{"_index":121,"t":{"303":{"position":[[0,3]]}}}],["vs",{"_index":143,"t":{"358":{"position":[[7,2]]}}}],["web",{"_index":137,"t":{"348":{"position":[[0,3]]}}}],["一步",{"_index":31,"t":{"83":{"position":[[1,2]]},"109":{"position":[[1,2]]},"137":{"position":[[1,2]]},"168":{"position":[[1,2]]},"179":{"position":[[1,2]]},"210":{"position":[[1,2]]},"236":{"position":[[1,2]]},"244":{"position":[[1,2]]},"253":{"position":[[1,2]]},"270":{"position":[[1,2]]},"274":{"position":[[1,2]]},"287":{"position":[[1,2]]},"328":{"position":[[1,2]]},"352":{"position":[[1,2]]},"362":{"position":[[1,2]]},"376":{"position":[[1,2]]},"388":{"position":[[1,2]]},"412":{"position":[[1,2]]},"431":{"position":[[1,2]]},"464":{"position":[[1,2]]}}}],["三",{"_index":27,"t":{"74":{"position":[[4,1]]}}}],["专业术语",{"_index":6,"t":{"50":{"position":[[2,4]]},"297":{"position":[[6,4]]},"439":{"position":[[2,4]]}}}],["业务",{"_index":124,"t":{"307":{"position":[[2,2]]},"317":{"position":[[2,2]]}}}],["中心",{"_index":71,"t":{"172":{"position":[[2,2]]},"176":{"position":[[2,2]]},"177":{"position":[[2,2]]},"214":{"position":[[2,2]]},"218":{"position":[[7,2]]},"220":{"position":[[2,2]]},"226":{"position":[[2,2]]},"232":{"position":[[7,2]]}}}],["主库",{"_index":168,"t":{"454":{"position":[[8,2]]},"458":{"position":[[8,2]]},"460":{"position":[[9,2]]}}}],["主要",{"_index":111,"t":{"281":{"position":[[0,2]]},"317":{"position":[[0,2]]}}}],["事务",{"_index":68,"t":{"162":{"position":[[0,2]]},"291":{"position":[[0,2]]},"293":{"position":[[3,2]]},"295":{"position":[[9,2]]},"299":{"position":[[9,2]]},"460":{"position":[[2,2]]}}}],["事务管理",{"_index":134,"t":{"340":{"position":[[3,4]]}}}],["二",{"_index":25,"t":{"67":{"position":[[4,1]]},"264":{"position":[[2,1]]},"410":{"position":[[4,1]]}}}],["介绍",{"_index":72,"t":{"172":{"position":[[4,2]]},"214":{"position":[[4,2]]}}}],["代码",{"_index":36,"t":{"101":{"position":[[0,2]]},"145":{"position":[[10,2]]},"194":{"position":[[4,2]]},"199":{"position":[[4,2]]},"242":{"position":[[4,2]]}}}],["代码生成",{"_index":138,"t":{"350":{"position":[[0,4]]}}}],["使用",{"_index":90,"t":{"230":{"position":[[0,2]]},"382":{"position":[[2,2]]}}}],["依赖",{"_index":114,"t":{"283":{"position":[[2,2]]},"332":{"position":[[0,2]]}}}],["修改",{"_index":57,"t":{"151":{"position":[[0,2]]}}}],["入口",{"_index":40,"t":{"105":{"position":[[2,2]]},"133":{"position":[[2,2]]},"228":{"position":[[2,2]]},"372":{"position":[[2,2]]},"406":{"position":[[2,2]]},"423":{"position":[[2,2]]}}}],["关键",{"_index":41,"t":{"117":{"position":[[0,2]]}}}],["其它",{"_index":122,"t":{"305":{"position":[[0,2]]}}}],["写",{"_index":139,"t":{"356":{"position":[[0,1]]},"454":{"position":[[2,1]]}}}],["分层",{"_index":142,"t":{"358":{"position":[[2,2]]}}}],["分布式",{"_index":116,"t":{"293":{"position":[[0,3]]},"295":{"position":[[6,3]]},"299":{"position":[[6,3]]},"340":{"position":[[0,3]]},"358":{"position":[[13,3]]},"380":{"position":[[0,3]]}}}],["分库",{"_index":26,"t":{"67":{"position":[[7,2]]},"74":{"position":[[6,2]]}}}],["分片",{"_index":1,"t":{"45":{"position":[[2,2]]},"47":{"position":[[2,2]]},"48":{"position":[[2,2]]},"52":{"position":[[2,2]]},"54":{"position":[[2,2]]},"56":{"position":[[2,2]]}}}],["分离",{"_index":163,"t":{"435":{"position":[[2,2]]},"437":{"position":[[2,2]]},"441":{"position":[[2,2]]}}}],["分表",{"_index":18,"t":{"60":{"position":[[7,2]]},"74":{"position":[[8,2]]}}}],["分页",{"_index":61,"t":{"157":{"position":[[0,2]]}}}],["列表",{"_index":115,"t":{"285":{"position":[[2,2]]}}}],["创建",{"_index":77,"t":{"189":{"position":[[0,2]]}}}],["初始化",{"_index":19,"t":{"61":{"position":[[0,3]]},"68":{"position":[[0,3]]},"75":{"position":[[0,3]]},"311":{"position":[[0,3]]},"445":{"position":[[0,3]]}}}],["删除",{"_index":58,"t":{"153":{"position":[[0,2]]},"164":{"position":[[2,2]]}}}],["前面",{"_index":140,"t":{"356":{"position":[[2,2]]}}}],["功能",{"_index":112,"t":{"281":{"position":[[2,2]]}}}],["化",{"_index":51,"t":{"145":{"position":[[4,1]]},"147":{"position":[[6,1]]}}}],["单体",{"_index":141,"t":{"358":{"position":[[0,2]]}}}],["原则",{"_index":10,"t":{"54":{"position":[[6,2]]},"278":{"position":[[2,2]]}}}],["原理",{"_index":12,"t":{"56":{"position":[[6,2]]},"441":{"position":[[6,2]]}}}],["参数",{"_index":104,"t":{"259":{"position":[[2,2]]}}}],["参考",{"_index":9,"t":{"54":{"position":[[4,2]]},"251":{"position":[[0,2]]}}}],["发送",{"_index":80,"t":{"194":{"position":[[2,2]]},"204":{"position":[[10,2]]}}}],["名词解释",{"_index":73,"t":{"174":{"position":[[2,4]]},"216":{"position":[[2,4]]}}}],["启动",{"_index":39,"t":{"105":{"position":[[0,2]]},"133":{"position":[[0,2]]},"202":{"position":[[4,2]]},"228":{"position":[[0,2]]},"249":{"position":[[0,2]]},"320":{"position":[[0,2]]},"322":{"position":[[0,2]]},"372":{"position":[[0,2]]},"406":{"position":[[0,2]]},"423":{"position":[[0,2]]},"452":{"position":[[0,2]]}}}],["图示",{"_index":74,"t":{"176":{"position":[[4,2]]},"187":{"position":[[0,2]]}}}],["场景",{"_index":125,"t":{"307":{"position":[[4,2]]}}}],["均衡",{"_index":172,"t":{"456":{"position":[[12,2]]}}}],["基于",{"_index":32,"t":{"97":{"position":[[0,2]]},"103":{"position":[[0,2]]},"119":{"position":[[0,2]]},"131":{"position":[[0,2]]},"232":{"position":[[3,2]]},"394":{"position":[[0,2]]},"396":{"position":[[0,2]]},"398":{"position":[[6,2]]},"410":{"position":[[6,2]]}}}],["基本",{"_index":54,"t":{"147":{"position":[[0,2]]}}}],["基础",{"_index":131,"t":{"334":{"position":[[0,2]]}}}],["声明",{"_index":34,"t":{"97":{"position":[[4,2]]},"119":{"position":[[4,2]]}}}],["如何",{"_index":148,"t":{"382":{"position":[[0,2]]}}}],["安装",{"_index":13,"t":{"58":{"position":[[0,2]]},"93":{"position":[[0,2]]},"113":{"position":[[0,2]]},"141":{"position":[[0,2]]},"183":{"position":[[0,2]]},"222":{"position":[[0,2]]},"257":{"position":[[0,2]]},"313":{"position":[[0,2]]},"368":{"position":[[0,2]]},"400":{"position":[[0,2]]},"417":{"position":[[0,2]]},"447":{"position":[[0,2]]}}}],["实战",{"_index":17,"t":{"60":{"position":[[2,2]]},"67":{"position":[[2,2]]},"74":{"position":[[2,2]]},"177":{"position":[[4,2]]},"220":{"position":[[4,2]]},"309":{"position":[[2,2]]},"398":{"position":[[2,2]]},"410":{"position":[[2,2]]},"443":{"position":[[2,2]]}}}],["实现",{"_index":11,"t":{"56":{"position":[[4,2]]},"392":{"position":[[2,2]]},"421":{"position":[[0,2]]},"441":{"position":[[4,2]]}}}],["实际",{"_index":149,"t":{"384":{"position":[[0,2]]}}}],["对比",{"_index":89,"t":{"218":{"position":[[9,2]]}}}],["库",{"_index":170,"t":{"456":{"position":[[9,1]]}}}],["建议",{"_index":146,"t":{"360":{"position":[[8,2]]}}}],["开发",{"_index":144,"t":{"360":{"position":[[2,2]]}}}],["强制",{"_index":173,"t":{"458":{"position":[[5,2]]}}}],["彩蛋",{"_index":91,"t":{"232":{"position":[[0,2]]}}}],["微",{"_index":128,"t":{"322":{"position":[[2,1]]},"358":{"position":[[10,1]]},"404":{"position":[[2,1]]}}}],["截图",{"_index":88,"t":{"206":{"position":[[4,2]]}}}],["手工",{"_index":62,"t":{"159":{"position":[[0,2]]}}}],["打包",{"_index":98,"t":{"247":{"position":[[0,2]]}}}],["执行",{"_index":86,"t":{"204":{"position":[[4,2]]},"324":{"position":[[0,2]]}}}],["技术",{"_index":151,"t":{"392":{"position":[[0,2]]}}}],["持久",{"_index":50,"t":{"145":{"position":[[2,2]]},"147":{"position":[[4,2]]}}}],["挑战",{"_index":8,"t":{"52":{"position":[[7,2]]}}}],["换",{"_index":95,"t":{"232":{"position":[[16,1]]},"386":{"position":[[6,1]]}}}],["接口",{"_index":155,"t":{"394":{"position":[[26,2]]},"398":{"position":[[32,2]]},"404":{"position":[[5,2]]},"421":{"position":[[4,2]]}}}],["插件",{"_index":103,"t":{"257":{"position":[[9,2]]},"259":{"position":[[0,2]]},"261":{"position":[[7,2]]},"350":{"position":[[4,2]]}}}],["操作",{"_index":55,"t":{"147":{"position":[[7,2]]},"454":{"position":[[3,2]]},"456":{"position":[[3,2]]},"458":{"position":[[3,2]]}}}],["效果",{"_index":150,"t":{"384":{"position":[[6,2]]}}}],["数据",{"_index":0,"t":{"45":{"position":[[0,2]]},"47":{"position":[[0,2]]},"48":{"position":[[0,2]]},"52":{"position":[[0,2]]},"54":{"position":[[0,2]]},"56":{"position":[[0,2]]},"147":{"position":[[2,2]]},"342":{"position":[[0,2]]}}}],["数据库",{"_index":20,"t":{"61":{"position":[[3,3]]},"68":{"position":[[3,3]]},"75":{"position":[[3,3]]},"311":{"position":[[3,3]]},"445":{"position":[[3,3]]}}}],["新增",{"_index":56,"t":{"149":{"position":[[0,2]]}}}],["方式",{"_index":106,"t":{"262":{"position":[[0,2]]},"264":{"position":[[0,2]]}}}],["方案",{"_index":152,"t":{"392":{"position":[[4,2]]}}}],["方法",{"_index":174,"t":{"460":{"position":[[4,2]]}}}],["日志",{"_index":92,"t":{"232":{"position":[[10,2]]},"380":{"position":[[3,2]]},"384":{"position":[[2,2]]},"386":{"position":[[0,2]]}}}],["映射",{"_index":65,"t":{"159":{"position":[[7,2]]}}}],["服务",{"_index":129,"t":{"322":{"position":[[3,2]]},"358":{"position":[[11,2]]},"404":{"position":[[3,2]]},"421":{"position":[[2,2]]},"425":{"position":[[0,2]]},"427":{"position":[[0,2]]}}}],["服务提供者",{"_index":161,"t":{"416":{"position":[[0,5]]}}}],["服务端",{"_index":126,"t":{"320":{"position":[[9,3]]}}}],["本",{"_index":160,"t":{"408":{"position":[[0,1]]}}}],["本地",{"_index":22,"t":{"63":{"position":[[0,2]]},"70":{"position":[[0,2]]},"77":{"position":[[0,2]]},"95":{"position":[[0,2]]},"115":{"position":[[0,2]]},"143":{"position":[[0,2]]},"192":{"position":[[0,2]]},"197":{"position":[[0,2]]},"218":{"position":[[0,2]]},"224":{"position":[[0,2]]},"315":{"position":[[0,2]]},"370":{"position":[[0,2]]},"402":{"position":[[0,2]]},"419":{"position":[[0,2]]},"449":{"position":[[0,2]]}}}],["本文",{"_index":28,"t":{"81":{"position":[[0,2]]},"107":{"position":[[0,2]]},"135":{"position":[[0,2]]},"166":{"position":[[0,2]]},"208":{"position":[[0,2]]},"234":{"position":[[0,2]]},"268":{"position":[[0,2]]},"326":{"position":[[0,2]]},"374":{"position":[[0,2]]},"429":{"position":[[0,2]]},"462":{"position":[[0,2]]}}}],["架构",{"_index":101,"t":{"251":{"position":[[4,2]]},"358":{"position":[[4,2],[16,2]]},"360":{"position":[[4,2]]}}}],["架构图",{"_index":110,"t":{"280":{"position":[[2,3]]}}}],["查询",{"_index":60,"t":{"155":{"position":[[2,2]]},"157":{"position":[[2,2]]}}}],["框架",{"_index":118,"t":{"295":{"position":[[11,2]]}}}],["概念",{"_index":3,"t":{"47":{"position":[[4,2]]},"291":{"position":[[2,2]]},"293":{"position":[[5,2]]},"435":{"position":[[4,2]]}}}],["模块",{"_index":15,"t":{"58":{"position":[[6,2]]},"93":{"position":[[6,2]]},"113":{"position":[[6,2]]},"141":{"position":[[6,2]]},"183":{"position":[[6,2]]},"222":{"position":[[6,2]]},"240":{"position":[[0,2]]},"285":{"position":[[0,2]]},"313":{"position":[[6,2]]},"332":{"position":[[4,2]]},"334":{"position":[[2,2]]},"336":{"position":[[5,2]]},"338":{"position":[[4,2]]},"340":{"position":[[7,2]]},"342":{"position":[[4,2]]},"344":{"position":[[2,2]]},"346":{"position":[[4,2]]},"348":{"position":[[3,2]]},"368":{"position":[[6,2]]},"400":{"position":[[6,2]]},"417":{"position":[[6,2]]},"447":{"position":[[6,2]]}}}],["模型",{"_index":119,"t":{"299":{"position":[[11,2]]}}}],["模式",{"_index":120,"t":{"301":{"position":[[3,2]]},"303":{"position":[[4,2]]},"305":{"position":[[2,2]]},"309":{"position":[[8,2]]},"394":{"position":[[30,2]]},"396":{"position":[[17,2]]},"398":{"position":[[36,2]]},"410":{"position":[[23,2]]}}}],["模版",{"_index":53,"t":{"145":{"position":[[8,2]]}}}],["治理",{"_index":135,"t":{"342":{"position":[[2,2]]}}}],["泛化",{"_index":159,"t":{"396":{"position":[[13,2]]},"410":{"position":[[19,2]]}}}],["注册",{"_index":70,"t":{"172":{"position":[[0,2]]},"176":{"position":[[0,2]]},"177":{"position":[[0,2]]},"425":{"position":[[2,2]]}}}],["注解",{"_index":33,"t":{"97":{"position":[[2,2]]},"119":{"position":[[2,2]]}}}],["测试",{"_index":83,"t":{"201":{"position":[[0,2]]},"206":{"position":[[0,2]]},"319":{"position":[[0,2]]},"454":{"position":[[0,2]]},"456":{"position":[[0,2]]},"458":{"position":[[0,2]]},"460":{"position":[[0,2]]}}}],["测试用例",{"_index":24,"t":{"65":{"position":[[0,4]]},"72":{"position":[[0,4]]},"79":{"position":[[0,4]]},"204":{"position":[[6,4]]},"324":{"position":[[2,4]]},"451":{"position":[[0,4]]}}}],["消息",{"_index":78,"t":{"191":{"position":[[0,2]]},"194":{"position":[[0,2]]},"196":{"position":[[0,2]]},"199":{"position":[[0,2]]},"204":{"position":[[12,2]]},"346":{"position":[[0,2]]}}}],["消费",{"_index":84,"t":{"202":{"position":[[6,2]]}}}],["消费者",{"_index":81,"t":{"196":{"position":[[2,3]]},"202":{"position":[[0,3]]},"427":{"position":[[2,3]]}}}],["源码",{"_index":30,"t":{"81":{"position":[[6,2]]},"107":{"position":[[6,2]]},"135":{"position":[[6,2]]},"166":{"position":[[6,2]]},"208":{"position":[[6,2]]},"234":{"position":[[6,2]]},"268":{"position":[[6,2]]},"326":{"position":[[6,2]]},"374":{"position":[[6,2]]},"408":{"position":[[3,2]]},"429":{"position":[[6,2]]},"462":{"position":[[6,2]]}}}],["热切",{"_index":94,"t":{"232":{"position":[[14,2]]},"386":{"position":[[4,2]]}}}],["片段",{"_index":37,"t":{"101":{"position":[[2,2]]}}}],["特性",{"_index":67,"t":{"161":{"position":[[2,2]]}}}],["环境",{"_index":21,"t":{"61":{"position":[[6,2]]},"68":{"position":[[6,2]]},"75":{"position":[[6,2]]},"311":{"position":[[6,2]]},"445":{"position":[[6,2]]}}}],["生产者",{"_index":79,"t":{"191":{"position":[[2,3]]},"204":{"position":[[0,3]]}}}],["生态",{"_index":109,"t":{"280":{"position":[[0,2]]}}}],["生成",{"_index":49,"t":{"145":{"position":[[0,2]]}}}],["监听",{"_index":82,"t":{"199":{"position":[[2,2]]},"202":{"position":[[8,2]]}}}],["盘古",{"_index":14,"t":{"58":{"position":[[4,2]]},"93":{"position":[[4,2]]},"113":{"position":[[4,2]]},"141":{"position":[[4,2]]},"183":{"position":[[4,2]]},"222":{"position":[[4,2]]},"313":{"position":[[4,2]]},"360":{"position":[[0,2]]},"368":{"position":[[4,2]]},"400":{"position":[[4,2]]},"417":{"position":[[4,2]]},"447":{"position":[[4,2]]}}}],["目录",{"_index":96,"t":{"240":{"position":[[2,2]]}}}],["相关",{"_index":5,"t":{"50":{"position":[[0,2]]},"58":{"position":[[2,2]]},"81":{"position":[[2,2]]},"93":{"position":[[2,2]]},"107":{"position":[[2,2]]},"113":{"position":[[2,2]]},"135":{"position":[[2,2]]},"141":{"position":[[2,2]]},"166":{"position":[[2,2]]},"174":{"position":[[0,2]]},"183":{"position":[[2,2]]},"208":{"position":[[2,2]]},"216":{"position":[[0,2]]},"222":{"position":[[2,2]]},"234":{"position":[[2,2]]},"268":{"position":[[2,2]]},"313":{"position":[[2,2]]},"326":{"position":[[2,2]]},"368":{"position":[[2,2]]},"374":{"position":[[2,2]]},"400":{"position":[[2,2]]},"417":{"position":[[2,2]]},"429":{"position":[[2,2]]},"439":{"position":[[0,2]]},"447":{"position":[[2,2]]},"462":{"position":[[2,2]]}}}],["程序",{"_index":85,"t":{"202":{"position":[[10,2]]}}}],["简单",{"_index":59,"t":{"155":{"position":[[0,2]]}}}],["管理",{"_index":130,"t":{"332":{"position":[[2,2]]}}}],["类",{"_index":165,"t":{"452":{"position":[[2,1]]}}}],["类型",{"_index":4,"t":{"48":{"position":[[4,2]]}}}],["级别",{"_index":93,"t":{"232":{"position":[[12,2]]},"386":{"position":[[2,2]]}}}],["组件",{"_index":113,"t":{"283":{"position":[[0,2]]}}}],["结果",{"_index":87,"t":{"206":{"position":[[2,2]]},"266":{"position":[[2,2]]}}}],["缓存",{"_index":136,"t":{"344":{"position":[[0,2]]}}}],["编写",{"_index":63,"t":{"159":{"position":[[2,2]]}}}],["编程",{"_index":16,"t":{"60":{"position":[[0,2]]},"67":{"position":[[0,2]]},"74":{"position":[[0,2]]},"103":{"position":[[7,2]]},"131":{"position":[[7,2]]},"309":{"position":[[0,2]]},"398":{"position":[[0,2]]},"410":{"position":[[0,2]]},"443":{"position":[[0,2]]}}}],["网关",{"_index":158,"t":{"396":{"position":[[10,2]]},"410":{"position":[[16,2]]}}}],["背景",{"_index":2,"t":{"45":{"position":[[4,2]]},"366":{"position":[[0,2]]}}}],["脚本",{"_index":99,"t":{"247":{"position":[[2,2]]},"249":{"position":[[2,2]]}}}],["自动",{"_index":166,"t":{"454":{"position":[[5,2]]},"456":{"position":[[5,2]]},"460":{"position":[[6,2]]}}}],["范例",{"_index":29,"t":{"81":{"position":[[4,2]]},"107":{"position":[[4,2]]},"135":{"position":[[4,2]]},"166":{"position":[[4,2]]},"208":{"position":[[4,2]]},"234":{"position":[[4,2]]},"242":{"position":[[2,2]]},"268":{"position":[[4,2]]},"326":{"position":[[4,2]]},"374":{"position":[[4,2]]},"408":{"position":[[1,2]]},"429":{"position":[[4,2]]},"462":{"position":[[4,2]]}}}],["获取",{"_index":97,"t":{"242":{"position":[[0,2]]}}}],["虚拟",{"_index":123,"t":{"307":{"position":[[0,2]]}}}],["规划",{"_index":76,"t":{"185":{"position":[[2,2]]}}}],["设计",{"_index":108,"t":{"278":{"position":[[0,2]]},"307":{"position":[[6,2]]}}}],["说明",{"_index":43,"t":{"117":{"position":[[5,2]]},"187":{"position":[[2,2]]},"240":{"position":[[4,2]]},"259":{"position":[[4,2]]}}}],["读",{"_index":169,"t":{"456":{"position":[[2,1]]},"458":{"position":[[2,1]]}}}],["读写",{"_index":162,"t":{"435":{"position":[[0,2]]},"437":{"position":[[0,2]]},"441":{"position":[[0,2]]}}}],["调用",{"_index":156,"t":{"394":{"position":[[28,2]]},"396":{"position":[[15,2]]},"398":{"position":[[34,2]]},"404":{"position":[[0,2]]},"410":{"position":[[21,2]]}}}],["负载",{"_index":171,"t":{"456":{"position":[[10,2]]}}}],["走",{"_index":167,"t":{"454":{"position":[[7,1]]},"456":{"position":[[7,1]]},"458":{"position":[[7,1]]},"460":{"position":[[8,1]]}}}],["输出",{"_index":107,"t":{"266":{"position":[[0,2]]},"384":{"position":[[4,2]]}}}],["运行",{"_index":105,"t":{"261":{"position":[[0,2]]}}}],["追踪",{"_index":147,"t":{"380":{"position":[[5,2]]}}}],["选型",{"_index":145,"t":{"360":{"position":[[6,2]]}}}],["逻辑",{"_index":69,"t":{"164":{"position":[[0,2]]},"317":{"position":[[4,2]]}}}],["部署",{"_index":100,"t":{"251":{"position":[[2,2]]}}}],["配置",{"_index":23,"t":{"63":{"position":[[2,2]]},"70":{"position":[[2,2]]},"77":{"position":[[2,2]]},"95":{"position":[[2,2]]},"115":{"position":[[2,2]]},"117":{"position":[[2,2]]},"143":{"position":[[2,2]]},"192":{"position":[[2,2]]},"197":{"position":[[2,2]]},"214":{"position":[[0,2]]},"218":{"position":[[2,2],[5,2]]},"220":{"position":[[0,2]]},"224":{"position":[[2,2]]},"226":{"position":[[0,2],[4,2]]},"230":{"position":[[2,2]]},"232":{"position":[[5,2]]},"315":{"position":[[2,2]]},"370":{"position":[[2,2]]},"402":{"position":[[2,2]]},"419":{"position":[[2,2]]},"449":{"position":[[2,2]]}}}],["问题",{"_index":164,"t":{"437":{"position":[[8,2]]}}}],["队列",{"_index":75,"t":{"185":{"position":[[0,2]]},"189":{"position":[[2,2]]},"346":{"position":[[2,2]]}}}],["需",{"_index":52,"t":{"145":{"position":[[6,1]]}}}],["面临",{"_index":7,"t":{"52":{"position":[[4,2]]},"437":{"position":[[5,2]]}}}],["项",{"_index":42,"t":{"117":{"position":[[4,1]]}}}],["高级",{"_index":66,"t":{"161":{"position":[[0,2]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"标签 部 部署1 盘 盘古 Admin4 F FAQ1","s":"标签","u":"/pangu-framework/admin/tags","h":"","p":1},{"i":4,"t":"4 篇文档带有标签「盘古 Admin」 查看所有标签 搭建后端开发环境 盘古 Admin | 搭建后端开发环境 | 盘古开发框架 搭建前端开发环境 盘古 Admin | 搭建前端开发环境 | 盘古开发框架 简介 盘古通用权限系统开发框架 | 快速开始 | SUCI(Vue3、Element-Plus) | 盘古开发框架 新增业务功能模块 盘古通用权限系统开发框架 | 新增业务模块 | 盘古开发框架","s":"4 篇文档带有标签「盘古 Admin」","u":"/pangu-framework/admin/tags/盘古-admin","h":"","p":3},{"i":6,"t":"1 篇文档带有标签「FAQ」 查看所有标签 日常开发常见问答 常见问答 | 盘古 Admin","s":"1 篇文档带有标签「FAQ」","u":"/pangu-framework/admin/tags/faq","h":"","p":5},{"i":8,"t":"1 篇文档带有标签「盘古 APP」 查看所有标签 简介 盘古 APP Starter | 移动端多平台快速开发脚手架 | uViewUI | uni-app | 盘古开发框架","s":"1 篇文档带有标签「盘古 APP」","u":"/pangu-framework/app/tags/盘古-app","h":"","p":7},{"i":10,"t":"标签 盘 盘古 APP1 盘古 APP Starter3 F FAQ1","s":"标签","u":"/pangu-framework/app/tags","h":"","p":9},{"i":12,"t":"3 篇文档带有标签「盘古 APP Starter」 查看所有标签 部署运维参考 盘古 APP Starter 部署运维参考 | 盘古开发框架 搭建开发环境 盘古 APP Starter | 搭建开发环境 | 盘古开发框架 快速入门指南 盘古 APP Starter | 快速入门指南 | 盘古开发框架","s":"3 篇文档带有标签「盘古 APP Starter」","u":"/pangu-framework/app/tags/盘古-app-starter","h":"","p":11},{"i":14,"t":"开发者社区 任何关于盘古框架的问题、想法或建议都可以通过 issues 提交。 主创团队🍃贡献者 码农大熊 Email: 307916217@qq.com Blog: https://xiongchun.pulanit.com Gitee: https://gitee.com/xiong-chun Github: https://github.com/xiongchun 开发者社区 主创团队🍃贡献者","s":"盘古开发框架 | 开发者社区 | 微信交流群 | 作者Email","u":"/pangu-framework/community","h":"","p":13},{"i":16,"t":"1 篇文档带有标签「部署」 查看所有标签 部署运维参考 盘古 Admin 部署运维参考 | 盘古 Admin | 盘古开发框架","s":"1 篇文档带有标签「部署」","u":"/pangu-framework/admin/tags/部署","h":"","p":15},{"i":18,"t":"盘古开发框架简介 「盘古开发框架」是一套轻量稳健的工业级前、中、后台三维多端行业数字化赋能开发框架。基于商业友好的 Apache-2.0 协议免费开源发布。我们希望不仅是开源的受益者也能成为开源贡献者,与开源社区一起共建共享开源生态。 生态子项目 盘古开发框架由「盘古服务开发框架」、「盘古中后台业务系统开发脚手架」、「盘古移动端多平台开发脚手架」三个子项目组成。可以单独拆箱使用,也可以打包整合。 盘古服务开发框架 盘古服务开发框架(PanGu Service Framework)以 Dubbo、Nacos 和 Spring Boot 为核心架构,可在云原生时代构建以「服务」为中心的现代应用架构,帮助用户在云环境中更好的构建、交付和管理自己的微服务平台(也兼容支持垂直单体分层架构开发模式)。 盘古中后台业务系统开发脚手架 盘古中后台业务系统开发脚手架(PanGu Admin)是一套基于 SCUI(Vue3、Element-Plus) + 盘古服务开发框架的中后台业务系统前后端统一解决方案。并预置了轻量成熟的权限系统参考实现,用户可以基于此快速搭建中后台业务系统二次开发脚手架。 盘古移动端多平台开发脚手架 盘古移动端多平台开发脚手架(PanGu App Starter) 是集成了 uni-app 内置组件、官方扩展组件和全面兼容 nvue 的 uni-app 生态框架 uView UI 的多平台快速开发脚手架。用户可以基于此完成Android/IOS App、微信小程序、H5 应用的快速开发(一次开发,针对不同平台编译发布版本)。 适用场景 基于盘古开发框架的前、中、后台三维多端行业数字化赋能能力,用户既能快速构建面向(移动)互联网的电商、金融、云端 SAAS 服务等大并发高可用可扩展的互联网应用场景,同时也能满足诸如 ERP 、CRM 等各种企业数字化和各级电子政务系统的中小规模业务需求。 生态架构图 生态子项目 适用场景 生态架构图","s":"盘古开发框架简介","u":"/pangu-framework/intro","h":"","p":17},{"i":20,"t":"1 篇文档带有标签「FAQ」 查看所有标签 日常开发常见问答 常见问答 | 盘古 APP Starter","s":"1 篇文档带有标签「FAQ」","u":"/pangu-framework/app/tags/faq","h":"","p":19},{"i":22,"t":"盘古 Admin :中后台业务系统二次开发脚手架 在线演示地址 https://pangu-admin.pulanit.com 演示系统截屏 1 2 3 4 5 6 7 8 9 10 11 12 13 14 在线演示地址 演示系统截屏","s":"盘古 Admin :中后台业务系统二次开发脚手架","u":"/pangu-framework/online-demo","h":"","p":21},{"i":24,"t":"盘古 APP : 移动端多平台快速开发脚手架 微信小程序在线演示 微信扫描访问 H5 Web 应用在线演示 微信或手机浏览器扫码访问 电脑端浏览器模拟访问 https://pangu-app-starter.pulanit.com/h5.html Android 原生应用在线演示 手机浏览器扫码下载安装(微信扫码无效) 在线演示截屏 1 2 3 4 5 6 7 8 9 10 11 微信小程序在线演示 H5 Web 应用在线演示 Android 原生应用在线演示 在线演示截屏","s":"盘古 APP : 移动端多平台快速开发脚手架","u":"/pangu-framework/online-demo-app","h":"","p":23},{"i":26,"t":"致敬 & 鸣谢 信息 盘古开发框架使用了很多优秀的开源项目,也正是由于站在这些开源项目的肩膀上,才有盘古开发框架诞生的可能。我们也希望不仅是开源的受益者,也能成为开源生态的贡献者。鉴于此,特单独列出如下盘古框架依赖到的开源基金会/社区组织、开源项目,为他们对开源世界所做出的卓越贡献表示致敬和感谢。 警告 下述列表排名不分先后,且不保证盘古开发框架资源依赖列表的完整性。 开源基金会/社区组织 Apache Software Foundation Spring Team GitHub Gitee 后端开源项目 Spring Framework:A key element of Spring is infrastructural support at the application level. so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments. Spring Boot:Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can \"just run\". Nacos:An easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. Apache Dubbo:A high-performance, java based open source RPC framework.Dubbo offers six key functionalities, which include transparent interface based RPC, intelligent load balancing, automatic service registration and discovery, high extensibility, runtime traffic routing, and visualized service governance. MyBatis:A first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis Plus:A powerful enhanced toolkit of MyBatis for simplify development. This toolkit provides some efficient, useful, out-of-the-box features for MyBatis. Laying Cahce:A multi-level caching framework that supports distributed environments. It uses Caffeine as a level 1 local cache and Redis as a level 2 centralized cache. ShardingSphere-JDBC:With the client end connecting directly to the database, it provides services in the form of a jar and requires no extra deployment and dependence for data sharding, readwrite-splitting, data encryption and shadow database etc. Seata:Seata is an open source distributed transaction solution that delivers high performance and easy to use distributed transaction services under a microservices architecture. Sentinel A powerful flow control component enabling reliability, resilience and monitoring for microservices. XXL Job:A distributed task scheduling framework. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand. Lock4j:Lock4j is a distributed lock component. Hutool:A set of tools that keep Java sweet. TLog:TLog is a lightweight distributed log tagging tracker. 前端开源项目 Vue.js 3:An approachable, performant and versatile framework for building web user interfaces. Element Plus:A Vue 3 based component library for designers and developers. SCUI:Vue3 + element plus based front-end solutions in the background. uni-app:是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。 uView UI:是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。 开源基金会/社区组织 后端开源项目 前端开源项目","s":"致敬 & 鸣谢","u":"/pangu-framework/thanks","h":"","p":25},{"i":28,"t":"日常开发常见问答 日常开发常见问答 本文将重点关注 Admin 前端开发问题的收集汇总。后端开发相关问题请查阅 服务开发常见问答 1. 可以将盘古 Admin 的后端改为单体应用吗? 必须可以。只需要将 pangu-admin-web 网关模块和 pangu-admin-system 权限模块做一些简单的合并即可。合并后就能将跨进程的 RPC 服务调用转变为 jvm 进程内本地服务调用。如果连配置中心都不想搭建的话,可以将配置直接改为本地配置文件。如此,就能使用传统的单体开发模式,将业务系统代码作为子包模块写入合并后的工程即可。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: FAQ 最后由 xiongchun 于 2023年3月6日 更新 上一页 部署运维参考","s":"日常开发常见问答","u":"/pangu-framework/admin/faq","h":"","p":27},{"i":30,"t":"部署运维参考 本页总览 部署运维参考 本文仅讨论 Admin 前端部署。后端服务部署相关问题请查阅 服务开发文档。 编译源文件 # 进入项目目录 cd pangu-framework/pangu-admin/pangu-admin-frontend # 构建部署(生产模式):编译后的文件将输出到 dist 文件夹 npm run build 部署 我们可以将 dist 文件夹内的文件直接部署到 ngix 或者 caddy 等 web 服务器。nginx 的相关资源已经非常丰富了,本文就以新兴 web 服务器 caddy 为例来展示如何部署盘古 admin。示例将达到如下效果: 静态资源部署。 反向代理盘古 Admin 后端统一网关接口。 包括静态资源和 API 接口全站自动启用 SSL。 基于 Nginx 部署盘古 Admin 略。相关资源非常丰富,请自行查阅。 基于 Caddy 部署盘古 Admin Caddy 简介 Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go. — 摘自 Caddy 官网 充当 WebServer 部署项目静态网站。 充当流量网关方向代理后端的 Web 节点(业务网关)。 全站自动 SSL。包含静态网站和 API 请求。 解决跨域请求;解决前端 https 后端 http 的协议适配问题。 上传静态资源文件 将编译输出后 dist 文件夹内容上传到服务器某个路径。如:/var/www/pangu-admin 解析域名 登录域名服务商控制台,添加一条二级域名,如: pangu-admin.pulanit.com 的解析记录。 修改配置文件 # vi /etc/caddy/Caddyfile pangu-admin.pulanit.com { # Set this path to your site's directory. root * /var/www/pangu-admin encode gzip # Enable the static file server. file_server # Another common task is to set up a reverse proxy: reverse_proxy /api/* { # 可以指定多个后端业务网关 WEB 节点 to localhost:8080 } } 静态资源文件上传到目录:/var/www/pangu-admin。 Admin 后端部署不在本文讨论范围,本文仅通过 Caddy 反向代理后端业务网关。 通过如上配置,网站和 API 自动都拥有了 https 的能力。 测试 根据上述配置即可尝试访问盘古 Admin 首页了。https://pangu-admin.pulanit.com 提示 上述部署结构,使得静态网站和 API 处于同一域名下,解决了跨域的问题。但如果 API 需要反向代理到不同的端口下或者域名下,则可以设置业务网关的参数开启跨域支持,也可以在 Caddy 配置文件配置响应头参数以支持跨域访问。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 部署 最后由 xiongchun 于 2023年3月6日 更新 上一页 新增业务功能模块 下一页 日常开发常见问答 编译源文件 部署 基于 Nginx 部署盘古 Admin 基于 Caddy 部署盘古 Admin 下一步","s":"部署运维参考","u":"/pangu-framework/admin/deploy-admin","h":"","p":29},{"i":32,"t":"快速开始 搭建前端开发环境 本页总览 搭建前端开发环境 工程结构说明 盘古 Admin 前端仓库代码路径:pangu-framework/pangu-admin/pangu-admin-frontend。 前端开发环境搭建 前端 IDE 可以自由选择,推荐 vscode。 安装 & 启动 安装依赖和启动需依赖npm。安装方法:https://nodejs.org/zh-cn # 进入项目目录 cd pangu-framework/pangu-admin/pangu-admin-frontend # 安装依赖 npm i # 启动项目 (开发模式) npm run serve # 构建部署(生产模式):将根目录生成 dist 文件夹发布到服务器即可 npm run build 编译启动成功后可通过控制台提示信息开始访问。如:http://localhost:2800 Admin 权限系统截屏 如下为权限系统参考实现的部分截屏。完整体验请访问:在线演示系统。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 Admin 最后由 xiongchun 于 2023年3月6日 更新 上一页 搭建后端开发环境 下一页 新增业务功能模块 工程结构说明 前端开发环境搭建 安装 & 启动 Admin 权限系统截屏 下一步","s":"搭建前端开发环境","u":"/pangu-framework/admin/how-to-create-frontend-environment","h":"","p":31},{"i":34,"t":"搭建开发环境 本页总览 搭建开发环境 工程结构说明 盘古 App 仓库代码路径:pangu-framework/pangu-app-starter。 开发环境搭建 由于 uni-app 依赖 HbuilderX,因此,我们开发盘古 APP 的 IDE 选择为 HbuilderX。 导入模版工程 使用 HbuilderX「文件 -> 导入 -> 从本地目录导入」菜单,导入 pangu-app-starter 模版工程。 安装依赖 安装依赖和启动需依赖npm。安装方法:https://nodejs.org/zh-cn # 进入项目目录 cd pangu-framework/pangu-app-starter # 安装依赖 npm i H5 Web 浏览器调试启动 使用 HbuilderX「运行 -> 运行到浏览器 -> Chrome」菜单,启动工程并通过浏览器访问。如下图所示。 微信小程序模拟器调试启动 安装微信开发者工具。 使用 HbuilderX 「运行 -> 运行到小程序模拟器 -> 微信开发者工具」菜单,HbuilderX 会编译输出小程序应用并连接微信开发者工具启动调试。如下图所示。 Android APP 真机调试启动 将 Android 手机用数据线与电脑连接,打开手机开发者调试模式。 使用 HbuilderX 「运行 -> 运行到手机或模拟器 -> 运行到 Android App 基座」菜单,HbuilderX 会将 Android 基座壳子安装到目标手机,并启动加载页面。如下图所示。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 APP Starter 最后由 xiongchun 于 2023年3月6日 更新 上一页 简介 下一页 快速入门指南 工程结构说明 开发环境搭建 导入模版工程 安装依赖 H5 Web 浏览器调试启动 微信小程序模拟器调试启动 Android APP 真机调试启动 下一步","s":"搭建开发环境","u":"/pangu-framework/app/how-to-create-environment","h":"","p":33},{"i":36,"t":"简介 本页总览 简介 盘古 APP Starter 是集成了 uni-app 内置组件、官方扩展组件和全面兼容 nvue 的 uni-app 生态框架 uView UI 的移动端多平台快速开发脚手架。用户可以基于此完成Android/IOS App、微信小程序、H5 应用的快速开发。(一次开发,针对不同平台编译发布版本) uni-app 介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。 uView UI 介绍 uView UI 是全面兼容 nvue 的 uni-app 生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。 HBuilderX 介绍 HbuilderX 是一款免费的前端开发 IDE。uni-app 的多端编译部署能力依赖于它。所以,盘古 APP Starter 的标准开发工具也就是 HBuilderX。 盘古 APP Starter 截屏 如下为盘古 APP Starter 的部分截屏。完整体验请访问:在线演示。 1 2 3 4 5 6 7 8 9 10 11 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 APP 最后由 xiongchun 于 2023年3月11日 更新 下一页 搭建开发环境 盘古 APP Starter 截屏 下一步","s":"简介","u":"/pangu-framework/app/intro","h":"","p":35},{"i":38,"t":"部署运维参考 本页总览 部署运维参考 发布 H5 Web 应用 将工程发布为手机 H5 Web 应用部署到静态资源服务器,可通过微信/手机浏览器等访问。 使用 HbuilderX「发行 -> 网站 PC-Web 或手机 H5」菜单,编译成功后执行文件将会输出到 unpackage/build/dist/h5 目录下。将该目录下文件直接发布到 Web 服务器即可。 如下为发布成功的盘古 APP Starter 模板工程的 H5 Web 应用。 微信或手机浏览器扫码访问 电脑端浏览器模拟访问 https://pangu-app-starter.pulanit.com/h5.html 发布微信小程序应用 请事先安装好微信开发者工具。下载安装 第一步:注册微信小程序账户 在微信 公众平台 注册小程序账户。(注意:一个邮箱地址注册一个微信小程序账户)。登录后根据提示生成微信小程序 AppID。(后续发布将会使用) 第二步:编译输出小程序文件 使用 HbuilderX「发行 -> 小程序-微信」菜单,在弹出的对话框中填入上一步的 AppID。(注意:不要选择自动上传到微信平台选项。)如下图所示: 点击「发行」按钮后会开始编译小程序输出文件并自动打开微信开发者工具导入小程序文件。接着使用微信开发者工具的「上传代码」按钮,将小程序文件上传到微信公众平台。如下图所示: 最后就是一个微信平台的代码审核、发布上线的流程即可,这里不再赘述。根据后台提示操作即可。 如下二维码是发布成功的盘古 APP Starter 模板工程的微信小程序示例。 微信扫码体验 发布 Android APP 应用 将工程打包发布为原生 Android APP 应用。对于.vue 页面将使用 webview 渲染机制;如果使用 .nvue 页面(native vue 的缩写),则使用原生渲染。 使用 HbuilderX 「运行 -> 原生APP-云打包」菜单,打开打包配置窗口。如下图所示为最便捷的配置窗口。(高级用法:自定义证书、自定义基座等可参考uni-app 和 HbuilderX 相关文档) 点击「打包」按钮,IDE 将完成云端打包。打包结束后,.apk 安装包将输出到:unpackage/release/apk 目录。 如下是发布成功的盘古 APP Starter 模板工程的 Android 原生 APP 示例。 手机浏览器扫码下载安装(微信扫码无效) 提示 更多类型的应用发布方式请参阅 uni-app 和 HbuilderX 相关文档。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 APP Starter 最后由 xiongchun 于 2023年3月7日 更新 上一页 快速入门指南 下一页 日常开发常见问答 发布 H5 Web 应用 发布微信小程序应用 发布 Android APP 应用 下一步","s":"部署运维参考","u":"/pangu-framework/app/web-h5","h":"","p":37},{"i":40,"t":"快速开始 搭建后端开发环境 本页总览 搭建后端开发环境 工程结构说明 盘古 Admin 后端仓库代码路径:pangu-framework/pangu-admin/pangu-admin-backend。 pangu-admin-web:统一网关 pangu-admin-system:权限模块 pangu-admin-system-api:权限模块服务接口 pangu-admin-system-app:权限模块服务实现 开发环境搭建 将后端工程引入 IDEA。工程代码:pangu-framework/pangu-admin/pangu-admin-backend。 执行目录 ~/pangu-admin-system/pangu-admin-system-app/src/main/resources/sql 中的数据脚本。 配置 分别在 nacos 配置中心创建模块pangu-admin-web和pangu-admin-system-app的配置信息。如下图所示。 关于 naocs 配置中心的相关用法请查阅开发指南章节的 配置中心。 pangu-admin-web pangu-admin-system-app Data Id 为 ppangu-admin-web 的配置数据 spring.jackson.time-zone=GMT+8 pangu.web.cross-origin=true dubbo.protocol.name=dubbo dubbo.protocol.port=-1 dubbo.consumer.timeout=5000 dubbo.registry.address=nacos://${nacos.server-addr}?namespace=${nacos.namespace} dubbo.consumer.check=false app.jwt.secret-key=alliswell666 app.jwt.ttl-min=480 app.jwt.persistent=true app.log.queue.producer.disabled=false #app.log.queue.producer.excludes.method-start-with=list,find,select,query,read app.log.queue.consumer.pool.threads=10 logging.level.root=INFO logging.level.com.gitee.pulanos.pangu=INFO logging.level.com.alibaba.nacos.client.config.impl.ClientWorker=WARN logging.level.com.yomahub.tlog.dubbo.filter=ERROR Data Id 为 pangu-admin-system-app 的配置数据 dubbo.protocol.name=dubbo dubbo.protocol.port=-1 dubbo.consumer.timeout=5000 dubbo.registry.address=nacos://${nacos.server-addr}?namespace=${nacos.namespace} dubbo.consumer.check=false dubbo.provider.filter=-exception spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/pangu-admin?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true spring.datasource.username=root spring.datasource.password=root123456 mybatis-plus.mapperLocations=classpath*:/mapper/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl mybatis-plus.global-config.db-config.logic-delete-field=deleted mybatis-plus.global-config.db-config.logic-not-delete-value=0 mybatis-plus.global-config.db-config.logic-delete-value=id pangu.jdbc.db-type=mysql logging.file.name=logs/pangu.log logging.level.root=INFO logging.level.com.gitee.pulanos.pangu=INFO logging.level.com.pulanit.pangu.admin.system.dao=DEBUG 启动 启动参数说明 -Dnacos.server-addr: nacos 服务器地址。 -Dnacos.namespace: nacos 里的命名空间 ID 。 启动权限服务模块 启动参数 -Dnacos.server-addr=100.100.100.XXX:8048 -Dnacos.namespace=pangu-dev 启动成功后在 nacos 服务列表中可看到相关服务提供者信息。如下图所示。 启动网关模块 启动参数 -Dnacos.server-addr=100.100.100.XXX:8048 -Dnacos.namespace=pangu-dev 启动成功后在 nacos 服务列表中可看到相关服务消费者信息。如下图所示。 提示 本文仅讨论盘古 Admin 后端开发环境搭建过程,至于后端服务开发方法和细节请参阅 服务开发文档。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 Admin 最后由 xiongchun 于 2023年3月2日 更新 上一页 简介 下一页 搭建前端开发环境 工程结构说明 开发环境搭建 配置 启动 下一步","s":"搭建后端开发环境","u":"/pangu-framework/admin/how-to-create-backend-environment","h":"","p":39},{"i":42,"t":"快速入门指南 本页总览 快速入门指南 配置底部导航菜单 以范例 APP 底部的「组件」导航菜单为例,说明如何配置首页底部的导航菜单。 配置菜单节点信息 打开 pages.json 配置文件,找到 tabBar 节点。如下所示: \"tabBar\": { \"color\": \"#303133\", \"selectedColor\": \"#529b2e\", \"borderStyle\": \"black\", \"backgroundColor\": \"#f4f4f5\", \"list\": [{ \"pagePath\": \"pages/example/components\", \"iconPath\": \"static/common/img/nav/component.png\", \"selectedIconPath\": \"static/common/img/nav/component-selected.png\", \"text\": \"组件\" } // ...其它菜单配置... ] } 配置菜单路由信息 配置路径 pages/example/components 的路由信息。在 pages.json 配置文件中,找到 pages 节点。如下所示: \"pages\": [ //pages数组中第一项表示应用启动页 { \"path\": \"pages/example/components\", \"style\": { \"navigationBarTitleText\": \"组件\" } } // ...其它路由配置... ] 该路由配置对应视图文件:pages/example/components.nvue。 新增业务模块页面路由 参考 pages.json 相关配置文件即可。 提示 更多关于 pages.json 的配置,请查阅 uni-app 相关文档。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 APP Starter 最后由 xiongchun 于 2023年3月11日 更新 上一页 搭建开发环境 下一页 部署运维参考 配置底部导航菜单 配置菜单节点信息 配置菜单路由信息 新增业务模块页面路由 下一步","s":"快速入门指南","u":"/pangu-framework/app/quick-start","h":"","p":41},{"i":44,"t":"盘古开发框架集成了数据库中间件 ShardingSphere 来提供数据治理相关功能。如:数据分片、读写分离、数据加密等。","s":"数据治理之数据分片","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"","p":43},{"i":46,"t":"随着业务规模不断的扩大,将数据集中存储到单一节点的解决方案,在性能、可用性和运维成本等方面已经难于满足高并发和海量数据系统的场景。从性能方面来说,高并发访问请求使得集中式数据库成为系统的最大瓶颈;从可用性的方面来讲,单一数据节点或简单主从架构,已经越来越难以满足互联网 To C 业务对高可用的迫切诉求,数据库的可用性俨然已成为整个系统的关键;从运维成本和系统风险方面考虑,当一个数据库实例中的数据达到临界阈值以上,数据备份和恢复的时间成本和风险都将随着数据量的大小而愈发不可控。数据分片将存放在单一库中的数据分散至多个库或表中以达到提升性能、提高可用性和降低运维成本的效果,是应对高并发和海量数据系统的有效手段。","s":"数据分片背景","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片背景","p":43},{"i":49,"t":"数据分片可分为垂直分片和水平分片。 垂直分片 垂直分片是按照业务域将数据库纵向切分为不同的数据库。如电商系统的用户库、订单库、会员库、仓储库、账户库等。垂直拆分可以缩库但无法缩表,即可以减小单节点下数据库数据量,但每个数据表里面的数据量是没有变化的;垂直拆分可以一定程度降低单节点数据库的负载,但是每个数据表的并发压力依旧没变。 水平分片 水平分片又称为横向拆分。相对于垂直分片,水平分片不再根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或多个表中。水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是数据分片的标准解决方案。水平分片从具体实现上又可以分为3种:只分表、只分库、分库分表。如下图所示。","s":"数据分片类型","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片类型","p":43},{"i":51,"t":"逻辑表:相同结构的水平拆分数据库(表)的逻辑名称,是 SQL 中数据表的逻辑标识。如:t_order 表被拆分为 t_order0 和 t_order1,则 t_order 是逻辑表,并不存放数据,仅用于 SQL 中的逻辑标识。 真实表:在水平拆分的数据库中真实存在的物理表。如:t_order 表被拆分为 t_order0 和 t_order1,则 t_order0 和 t_order1 是真实表,用于存储数据。 绑定表:指分片规则一致的主表和子表。例如:t_order 表和 t_order_item 表,均按照 order_id 分片,并且使用 order_id 进行关联,则此两张表互为绑定表关系,绑定表的关联查询不会出现笛卡尔积关联或跨库关联,关联查询效率将大大提升。可以在配置中配置绑定表关系。 广播表:指在所有的分片数据源中都存在的表,表结构及其数据均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景。例如:字典表、地址表等。对广播表的DML操作,会自动路由到所有的数据节点。可以在配置中配置广播表。 单表:指不需要参与分片且所有数据源中唯一存在的表。 数据节点:数据分片的最小单元,由数据源名称和真实表组成。 如:ds0.t_order0。 分片键:用于将数据库(表)水平拆分的数据库字段。 分片策略:分片键 + 分片算法。 分布式主键:分片后的表主键不能使用数据库自身的自增列机制,需要额外引入主键生成策略。ShardingSphere 提供了基于 UUID 和 SNOWFLAKE 的分布式主键生成机制,但不建议使用。最灵活的方式还是自己生成分布式ID传给新增的实体对象。盘古框架使用 MyBatis Plus 的主键生成功能。(同样可选 UUID 主键和 SNOWFLAKE 算法主键) 提示:SNOWFLAKE 算法主键能保证递增,但不能保证数字的连续性。如果需要递增且连续的分布式主键,需要自己实现。 强制分片路由:基于 Hint 机制指定了强制分片路由的 SQL 请求会忽略分片逻辑,直接将请求路由至指定的真实数据节点。","s":"相关专业术语","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#相关专业术语","p":43},{"i":53,"t":"虽然数据分片解决了性能、可用性以及单点备份恢复等问题,但分布式的架构在获得了收益的同时,也引入了新的问题。 分片后的数据散乱且关系复杂,应用开发工程师和数据库管理员对数据库的操作变得异常繁重且困难。他们需要明确知道数据从哪写入,从哪读取。 数据分片后势必会带来分布式事务的处理。能够优雅的处理好分布式事务,这对开发而言也是一个全新的挑战。(分布式事务处理跨参考:盘古框架分布式事务最佳实践) 数据库请求路由至多数据节点的时候,部分SQL支持不完整或性能损耗较大的问题。","s":"数据分片面临的挑战","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片面临的挑战","p":43},{"i":55,"t":"需综合权衡业务场景、客观估算数据分片性价比,不要盲目分片。数据分片在获得收益的同时,也引入了新的问题。 分片参考临界值:一般来讲 MySQL单表记录控制在 1000 万以内、数据库单实例数据大小控制在 1 TB 以内是比较合理的范围。 分表不分库仅涉及本地事务,垂直分片和水平分片的分库分表均会带来分布式事务。设计过程应考虑不要人为扩大没必要的分布式事务使用边界。(也可以适当放宽) 分片键的规划尤为重要,需要结合业务特点来精心设计。 对分片表的查询必须包含分片键,且尽可能的保持单表。分片表的关联查询,请结合绑定表和广播表酌情合理使用。 总之,采用什么样的数据架构需要结合性能诉求、可用性、运维成本、开发成本、项目背景和业务场景等方面来做权衡选择。上述仅为一些孤立的参考原则。","s":"数据分片参考原则","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片参考原则","p":43},{"i":57,"t":"实现数据分片大致有 2 种方案。如下图所示。 数据库代理模式(服务端代理) 在数据库和应用系统之间独立部署一个数据库代理中间件,所有的 SQL 请求先发送到这个代理,由它完成 SQL 解析、SQL改写、SQL 路由、结果集聚合等必要操作。在这种模式下,路由规则、分配逻辑都配置到代理上,数据分片的逻辑对开发人员是透明的。 数据源代理模式(客户端代理) 通过在应用端引入组件包,代理应用普通数据源。在这种模式下,路由规则、分片逻辑配置到应用侧,所有 SQL 请求都通过代理数据源完成 SQL 解析、SQL改写、SQL 路由、结果集聚合等必要操作。 实现方式 可选组件 优点 缺点 数据库代理模式 ShardingSphere-Proxy MyCat 多语言支持 独立部署(升级简单) 对开发完全透明 独立部署(增加不稳定因素) 运维成本高 性能损耗高 数据源代理模式 💋 ShardingSphere-JDBC 集成简单、轻松驾驭 性能较好 嵌入 JAR(升级麻烦) 日常数据维护麻烦 警告 盘古开发框架使用 ShardingSphere-JDBC 组件,通过数据源代理的方式实现数据分片功能。","s":"数据分片实现原理","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#数据分片实现原理","p":43},{"i":59,"t":"盘古 Parent 基础模块 JDBC 模块 数据治理模块 com.gitee.pulanos.pangu pangu-parent latest.version.xxx com.gitee.pulanos.pangu pangu-spring-boot-starter com.gitee.pulanos.pangu pangu-jdbc-spring-boot-starter com.gitee.pulanos.pangu pangu-data-governance-spring-boot-starter ","s":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#安装相关盘古模块","p":43},{"i":62,"t":"数据库表结构和分片算法逻辑如下图所示。 请根据如下逻辑表结构创建真实表 t_order0 和 t_order1。 create table t_order ( order_id bigint not null primary key, user_id int not null, status varchar(50) null ) comment '逻辑表:订单表';","s":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境","p":43},{"i":64,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。 spring.application.name=pangu-examples-shardingsphere-sharding mybatis-plus.mapperLocations=classpath*:/mapper/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl spring.shardingsphere.mode.type=Memory # print shardingsphere Actual SQL log spring.shardingsphere.props.sql-show=true spring.shardingsphere.datasource.names=ds-0 spring.shardingsphere.datasource.ds-0.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds-0.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds-0.jdbc-url=jdbc:mysql://localhost:3306/pangu-examples spring.shardingsphere.datasource.ds-0.username=root spring.shardingsphere.datasource.ds-0.password=123456 # sharding table `t_order` configuration spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds-0.t_order$->{0..1} spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=sa-0 # sharding-algorithms configuration spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.props.algorithm-expression=t_order$->{order_id % 2} 关键配置项说明 配置项 配置说明 *.t_order.actual-data-nodes 表 t_order 对应的数据节点(真实表) *.t_order.table-strategy.standard.sharding-column 表 t_order 的分片键 *.t_order.table-strategy.standard.sharding-algorithm-name 表 t_order 的分片算法名称(自定义标识符) *.sharding-algorithms.sa-0.type 分片算法 sa-0 的类型(INLINE:内置算法) *.sharding-algorithms.sa-0.props.algorithm-expression 分片算法 sa-0 的分片表达式","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置","p":43},{"i":66,"t":"测试写入数据分片 写入时将分片键 order_id 对 2 求模,并根据求模结果将订单数据分片到 2 个表中存储。 @Test public void createOrder() { TOrderEntity entity1 = new TOrderEntity().setUserId(1).setStatus(\"0\"); tOrderMapper.insert(entity1); TOrderEntity entity2 = new TOrderEntity().setUserId(1).setStatus(\"0\"); tOrderMapper.insert(entity2); } TOrderEntity 的 orderId 主键请通过如下注解生成。当然也可以自定义 ID 算法赋值。 @TableId(value = \"order_id\", type = IdType.ASSIGN_ID) private Long orderId; 测试根据分片键路由查询 根据分片算法,将SQL查询请求路由到对应的真实表查询。 @Test public void routingQuery() { TOrderEntity entity = tOrderMapper.selectById(150681599250L); log.info(\"结果集:{}\" , entity); TOrderEntity entity2 = tOrderMapper.selectById(150683023105L); log.info(\"结果集:{}\" , entity2); } 测试结果集归并、绑定表关联查询、强制路由等特性 不再赘述。请直接获取 本范例源码 查看。","s":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例","p":43},{"i":69,"t":"数据库表结构和分片算法逻辑如下图所示。 数据库逻辑表结构 同上,请自行创建相关真实库表结构。","s":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境-1","p":43},{"i":71,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。 spring.application.name=pangu-examples-shardingsphere-sharding mybatis-plus.mapperLocations=classpath*:/mapper/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl spring.shardingsphere.mode.type=Memory # print shardingsphere Actual SQL log spring.shardingsphere.props.sql-show=true spring.shardingsphere.datasource.names=ds-0,ds-1 spring.shardingsphere.datasource.ds-0.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds-0.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds-0.jdbc-url=jdbc:mysql://localhost:3306/pangu-examples spring.shardingsphere.datasource.ds-0.username=root spring.shardingsphere.datasource.ds-0.password=123456 spring.shardingsphere.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds-1.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds-1.jdbc-url=jdbc:mysql://localhost:3306/pangu-examples-1 spring.shardingsphere.datasource.ds-1.username=root spring.shardingsphere.datasource.ds-1.password=123456 # sharding table `t_order` configuration spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds-$->{0..1}.t_order spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-column=user_id spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-algorithm-name=sa-0 # sharding-algorithms configuration spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.props.algorithm-expression=ds-$->{user_id % 2} 关键配置项说明 配置项 配置说明 *.t_order.actual-data-nodes 表 t_order 对应的数据节点(真实表) *.default-database-strategy.standard.sharding-column 表 t_order 的分片键 *.default-database-strategy.standard.sharding-algorithm-name 表 t_order 的分片算法名称(自定义标识符) *.sharding-algorithms.sa-0.type 分片算法 sa-0 的类型(INLINE:内置算法) *.sharding-algorithms.sa-0.props.algorithm-expression 分片算法 sa-0 的分片表达式","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置-1","p":43},{"i":73,"t":"测试写入数据分片 写入时将分片键:user_id 对 2 求模,根据求模结果将不同用户的订单数据分到2个库中存储。 @Test public void createOrder() { TOrderEntity entity1 = new TOrderEntity().setUserId(1).setStatus(\"0\"); tOrderMapper.insert(entity1); TOrderEntity entity2 = new TOrderEntity().setUserId(2).setStatus(\"0\"); tOrderMapper.insert(entity2); } 测试根据分片键路由查询 根据分片算法,将SQL查询请求路由到对应的真实表查询。 @Test public void routingQuery() { List list1 = tOrderMapper.selectList(Wrappers.lambdaQuery().eq(TOrderEntity::getUserId, 1)); log.info(\"结果集:{}\" , list1); List list2 = tOrderMapper.selectList(Wrappers.lambdaQuery().eq(TOrderEntity::getUserId, 2)); log.info(\"结果集:{}\" , list2); } 测试结果集归并、绑定表关联查询、强制路由等特性 不再赘述。请直接获取 本范例源码 查看。","s":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例-1","p":43},{"i":76,"t":"数据库表结构和分片算法逻辑如下图所示。 数据库逻辑表结构 同上,请自行创建相关真实库表结构。","s":"初始化数据库环境","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#初始化数据库环境-2","p":43},{"i":78,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。 spring.application.name=pangu-examples-shardingsphere-sharding mybatis-plus.mapperLocations=classpath*:/mapper/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl spring.shardingsphere.mode.type=Memory # print shardingsphere Actual SQL log spring.shardingsphere.props.sql-show=true spring.shardingsphere.datasource.names=ds-0,ds-1 spring.shardingsphere.datasource.ds-0.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds-0.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds-0.jdbc-url=jdbc:mysql://localhost:3306/pangu-examples spring.shardingsphere.datasource.ds-0.username=root spring.shardingsphere.datasource.ds-0.password=123456 spring.shardingsphere.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds-1.driver-class-name=com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds-1.jdbc-url=jdbc:mysql://localhost:3306/pangu-examples-1 spring.shardingsphere.datasource.ds-1.username=root spring.shardingsphere.datasource.ds-1.password=123456 # sharding table `t_order` configuration spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-column=user_id spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-algorithm-name=sa-0 spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds-$->{0..1}.t_order$->{0..1} spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=sa-1 # sharding databases algorithms configuration spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.sa-0.props.algorithm-expression=ds-$->{user_id % 2} # sharding tables algorithms configuration spring.shardingsphere.rules.sharding.sharding-algorithms.sa-1.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.sa-1.props.algorithm-expression=t_order$->{order_id % 2} 关键配置项说明 配置项 配置说明 *.t_order.actual-data-nodes 表 t_order 对应的数据节点(真实表) *.default-database-strategy.standard.sharding-column 表 t_order 的分库分片键 *.default-database-strategy.standard.sharding-algorithm-name 表 t_order 的分库分片算法名称 *.t_order.table-strategy.standard.sharding-column 表 t_order 的库内分表分片键 *.t_order.table-strategy.standard.sharding-algorithm-name 表 t_order 的库内分表算法名称 *.sharding-algorithms.sa-0.type 分库算法的类型 *.sharding-algorithms.sa-0.props.algorithm-expression 分库表达式 *.sharding-algorithms.sa-1.type 库内分表算法的类型 *.sharding-algorithms.sa-1.props.algorithm-expression 库内分表表达式","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本地配置-2","p":43},{"i":80,"t":"测试写入数据分片 写入时将分片键 user_id 对 2 求模,根据求模结果将订单数据分片到 2 个库中,再将分片键 order_id 对 2 求模,并根据求模结果将订单数据分片到库中不同的表来存储。(注意:本例有两个分片键,第一个用来分库;第二个用来库内分表。) @Test public void createOrder() { TOrderEntity entity1 = new TOrderEntity().setUserId(1).setStatus(\"0\"); tOrderMapper.insert(entity1); TOrderEntity entity2 = new TOrderEntity().setUserId(2).setStatus(\"0\"); tOrderMapper.insert(entity2); } TOrderEntity 的 orderId 主键请通过如下注解生成。当然也可以自定义 ID 算法赋值。 @TableId(value = \"order_id\", type = IdType.ASSIGN_ID) private Long orderId; 测试根据分片键路由查询 根据分片算法,将SQL查询请求路由到对应的真实表查询。 @Test public void routingQuery() { List list1 = tOrderMapper.selectList(Wrappers.lambdaQuery().eq(TOrderEntity::getUserId, 1)); log.info(\"结果集:{}\" , list1); List list2 = tOrderMapper.selectList(Wrappers.lambdaQuery().eq(TOrderEntity::getUserId, 2)); log.info(\"结果集:{}\" , list2); } 测试结果集归并、绑定表关联查询、强制路由等特性 不再赘述。请直接获取 本范例源码 查看。 警报 对分片表的查询操作,查询条件务必要包含分片键,否则会遍历所有数据节点。尽量维持单表查询。 如果需要关联查询,请结合绑定表、广播表酌情合理应用。","s":"测试用例","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#测试用例-2","p":43},{"i":82,"t":"pangu-examples-shardingsphere-sharding:数据治理之数据分片范例","s":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#本文相关范例源码","p":43},{"i":84,"t":"继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。","s":"下一步","u":"/pangu-framework/docs/advanced-guide/data-sharding","h":"#下一步","p":43},{"i":86,"t":"开发指南 新增业务功能模块 本页总览 新增业务功能模块 本文将介绍如何基于盘古 Admin 实现一个自己的业务功能模块。 虚拟业务场景 假设我们要实现的是一个某银行信用卡申请审批后台系统。在此,我们演示如何新增一个【信用卡人工复核】 菜单,列出各种渠道提交到后台的卡申请信息供审核人员审核确认。 第一步 新建模块工程 以 pangu-admin-system 为原型模版,新建业务模块工程。 ┌── icbc-card-audit # ICBC 某行信用卡审批相关业务 │ ├── icbc-card-audit-api # 业务接口 │ ├── icbc-card-audit-app # 业务实现 第二步 新建配置 在 nacos 配置中心创建 Data Id 为 icbc-card-audit-app 的配置数据。注意:所属命名空间需要和 pangu-admin-* 的配置数据所属命名空间保持一致。 第三步 网关集成 在网关模块 pangu-admin-web 的 pom.xml 中添加对接口模块 icbc-card-audit-api 的依赖。并通过 RestController 调用相关 api 接口。 提示 本文以缺省的微服务开发模式开发后端服务。如果您选择单体开发,则可参考 服务开发 相关文档。 第四步 新建前端模块 ┌── src # 源代码 │ ├── api # 在这里定义相关模块 API 请求 │ ├── views # 在这里新建相关模块前端页面 │ ├── ... # etc 第五步 新建业务菜单 登录权限系统,通过【资源管理】菜单,新增业务菜单【信用卡人工复核】。并将其授权给相关角色和人员即可。 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 Admin 最后由 xiongchun 于 2023年3月2日 更新 上一页 搭建前端开发环境 下一页 部署运维参考 虚拟业务场景 第一步 新建模块工程 第二步 新建配置 第三步 网关集成 第四步 新建前端模块 第五步 新建业务菜单 下一步","s":"新增业务功能模块","u":"/pangu-framework/admin/new-module","h":"","p":85},{"i":88,"t":"日常开发常见问答 日常开发常见问答 本文将重点关注 APP 前端开发问题的收集汇总。后端开发相关问题请查阅 服务开发常见问答 1. 为什么关于 APP 开发的文档比较少? 盘古 APP Starter 集成了 uni-app 和 uView UI,绑定使用 HbuilderX 作为开发 IDE。因此,关于组件使用规范细节、IDE 开发流程操作等问题可以参考如下文档即可。 uni-app 文档 uView UI 文档 HbuilderX 文档 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: FAQ 最后由 xiongchun 于 2023年3月7日 更新 上一页 部署运维参考","s":"日常开发常见问答","u":"/pangu-framework/app/faq","h":"","p":87},{"i":90,"t":"简介 本页总览 简介 盘古 Admin 是一套基于 SCUI(Vue3、Element-Plus) + 盘古服务开发框架的中后台业务系统前后端统一解决方案。并预置了轻量成熟的 权限系统参考实现,用户可以基于此快速搭建中后台业务系统二次开发脚手架。 前端方案介绍 盘古 Admin 前端基于 SUCI 开发。SCUI 是一个中后台前端解决方案,基于 VUE3 和 ElementPlus 实现。 使用最新的前端技术栈,提供各类实用的组件方便在业务开发时的调用,并且持续性的提供丰富的业务模板帮助你快速搭建企业级中后台前端任务。更多 SCUI 信息,请直接参考其 项目主页和相关文档。 后端方案介绍 盘古 Admin 后端基于盘古服务开发框架。详情请查看 相关文档。 Admin 权限系统截屏 如下为权限系统参考实现的部分截屏。完整体验请访问:在线演示系统。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 下一步 继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。 标签: 盘古 Admin 最后由 xiongchun 于 2023年3月9日 更新 下一页 搭建后端开发环境 前端方案介绍 后端方案介绍 Admin 权限系统截屏 下一步","s":"简介","u":"/pangu-framework/admin/intro","h":"","p":89},{"i":92,"t":"盘古开发框架基于 Lock4j 提供分布式锁。支持注解声明式和 API 编程式对业务代码在分布式环境下加并发锁。","s":"分布式锁","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"","p":91},{"i":94,"t":"盘古 Parent 基础模块 缓存模块 com.gitee.pulanos.pangu pangu-parent latest.version.xxx com.gitee.pulanos.pangu pangu-spring-boot-starter com.gitee.pulanos.pangu pangu-cache-spring-boot-starter ","s":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#安装相关盘古模块","p":91},{"i":96,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。 application.properties application-dev.properties spring.profiles.active=${spring.profiles.active:dev} spring.application.name=pangu-examples-lock-redis-based # spring-redis spring.redis.host=localhost spring.redis.database=1 spring.redis.port=6379 spring.redis.password= logging.level.root=INFO logging.level.com.gitee.pulanos.pangu=INFO","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#本地配置","p":91},{"i":98,"t":"直接在需要缓存的方法上加上 @Lock4j 注解。","s":"基于注解声明","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#基于注解声明","p":91},{"i":100,"t":"分布式锁注解。 名称 默认值 说明 name 空字符串 用于多个方法锁同一把锁 可以理解为锁资源名称,为空则会使用:包名 + 类名 + 方法名。(一般为空即可) keys 空字符串 支持 SPEL 表达式,锁的 key = name + keys acquireTimeout 3000 获取锁超时时间 单位:毫秒。可以理解为排队时常,超过这个时常就退出排队,抛出获取锁超时异常。 expire 30000 过期时间 单位:毫秒。主要是防止死锁,建议估计好你锁方法运行时常,正常没有复杂业务的增删改查最多几秒,留有一定冗余,10 秒足够。默认 30 秒是为了兼容绝大部分场景。","s":"@Lock4j","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#lock4j","p":91},{"i":102,"t":"/** * 默认获取锁超时 3 秒,30 秒锁过期 */ @Lock4j public void doBiz() { log.info(\"执行doBiz...\"); ThreadUtil.sleep(25*1000); } /** * 配置获取锁超时时间和锁过期时间 支持 SPEL * @param accountId */ @Lock4j(keys = {\"#accountId\"}, expire = 20000, acquireTimeout = 10000) public void doBiz2(Long accountId) { log.info(\"执行doBiz2...\"); ThreadUtil.sleep(20*1000); }","s":"代码片段","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#代码片段","p":91},{"i":104,"t":"注入 LockTemplate 对象即可使用。如下代码所示。 @Component public class ApiLockService { @Autowired private LockTemplate lockTemplate; public void apiLock(String userId) { //... 各种不需要上锁的操作 String lockKey = \"lock4j:ApiLockService:apiLock:\" + userId; final LockInfo lockInfo = lockTemplate.lock(lockKey); //申请锁失败 if (null == lockInfo) { throw new LockException(\"业务处理中,请稍后再试...\"); } //申请锁成功 try { ThreadUtil.sleep(10000L); log.info(\"执行 apiLock, 当前线程{}\", Thread.currentThread().getName()); } finally { lockTemplate.releaseLock(lockInfo); } } }","s":"基于 API 编程","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#基于-api-编程","p":91},{"i":106,"t":"@SpringBootApplication public class LockPanguApplication { public static void main(String[] args) { PanGuApplicationBuilder.init(LockPanguApplication.class).run(args); } }","s":"启动入口","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#启动入口","p":91},{"i":108,"t":"pangu-examples-lock-redis-based:分布式锁范例","s":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#本文相关范例源码","p":91},{"i":110,"t":"继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。","s":"下一步","u":"/pangu-framework/docs/advanced-guide/distributed-lock","h":"#下一步","p":91},{"i":112,"t":"盘古开发框架基于 Laying Cache,提供支持分布式环境的多级缓存功能。使用 Caffeine 作为一级本地缓存,Redis 作为二级集中式缓存。支持缓存信息监控统计、支持缓存过期时间在注解上直接配置、支持缓存的自动刷新、缓存 Key 支持 SpEL 表达式、支持无感禁用一级缓存或二级缓存。通过缓存空值来解决缓存穿透问题、通过判断即将过期时发起异步加载缓存的方式来解决缓存击穿和雪崩问题。","s":"分布式多级缓存","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"","p":111},{"i":114,"t":"盘古 Parent 基础模块 缓存模块 com.gitee.pulanos.pangu pangu-parent latest.version.xxx com.gitee.pulanos.pangu pangu-spring-boot-starter com.gitee.pulanos.pangu pangu-cache-spring-boot-starter ","s":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#安装相关盘古模块","p":111},{"i":116,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的 Nacos 配置中心模式,请参阅:配置中心 章节。 application.properties application-dev.properties spring.profiles.active=${spring.profiles.active:dev} spring.application.name=pangu-examples-cache-layering # layering-cache 多级缓存 layering-cache.stats=false # redis单机 layering-cache.redis.database=1 layering-cache.redis.host=localhost layering-cache.redis.port=6379 layering-cache.redis.password= # redis集群 #layering-cache.redis.password= #layering-cache.redis.cluster=127.0.0.1:6379,127.0.0.1:6378 layering-cache.redis.serializer=com.github.xiaolyuh.redis.serializer.JacksonRedisSerializer logging.level.root=INFO logging.level.com.gitee.pulanos.pangu=INFO","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#本地配置","p":111},{"i":118,"t":"配置项 配置说明 layering-cache.stats 缓存监控统计开关,缺省true layering-cache.redis.serializer Redis序列化方式","s":"关键配置项说明","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#关键配置项说明","p":111},{"i":120,"t":"直接在需要缓存的方法上加上 @Cacheable、@CacheEvict、@CachePut 注解。( @FirstCache、@SecondaryCache 为注解配置项,不能单独使用)","s":"基于注解声明","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#基于注解声明","p":111},{"i":122,"t":"一级缓存配置项。 名称 默认值 说明 initialCapacity 10 缓存初始 Size maximumSize 5000 缓存最大 Size expireTime 9 缓存有效时间 timeUnit TimeUnit.MINUTES 时间单位,默认分钟 expireMode ExpireMode.WRITE 缓存失效模式,ExpireMode.WRITE:最后一次写入后到期失效,ExpireMode.ACCESS:最后一次访问后到期失效","s":"@FirstCache","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#firstcache","p":111},{"i":124,"t":"二级缓存配置项。 名称 默认值 说明 expireTime 5 缓存有效时间 preloadTime 1 缓存主动在失效前强制刷新缓存的时间,建议是 expireTime * 0.2 timeUnit TimeUnit.HOURS 时间单位,默认小时 forceRefresh false 是否强制刷新(直接执行被缓存方法) magnification 1 非空值和 null 值之间的时间倍率,默认是 1。如 expireTime=60 秒,magnification=10,那么当缓存空值时,空值的缓存过期时间是 60/10=6 秒。","s":"@SecondaryCache","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#secondarycache","p":111},{"i":126,"t":"表示用的方法的结果是可以被缓存的,当该方法被调用时先检查缓存是否命中,如果没有命中再调用被缓存的方法,并将其返回值放到缓存中。 名称 默认值 说明 cacheNames 空字符串数组 缓存名称 key 空字符串 缓存 key,支持 SpEL 表达式 depict 空字符串 缓存描述(在缓存统计页面会用到) enableFirstCache true 是否启用一级缓存 firstCache 一级缓存配置 secondaryCache 二级缓存配置 @Cacheable 范例代码 @Cacheable(cacheNames = \"user\", key = \"#userId\", firstCache = @FirstCache(expireTime = 5), secondaryCache = @SecondaryCache(expireTime = 10)) public UserVO getUser(Long userId) { log.info(\"执行AnnotationBasedDemoService.getUser()\"); // 从DB或其它资源渠道获取数据 UserVO userVO = new UserVO(); userVO.setId(userId); userVO.setName(\"钱学森\"); return userVO; }","s":"@Cacheable","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheable","p":111},{"i":128,"t":"将数据放到缓存中,新增缓存。 名称 默认值 说明 cacheNames 空字符串数组 缓存名称 key 空字符串 缓存 key,支持 SpEL表达式 depict 空字符串 缓存描述(在缓存统计页面会用到) enableFirstCache true 是否启用一级缓存 firstCache 一级缓存配置 secondaryCache 二级缓存配置 @CachePut 范例代码 @CachePut(cacheNames = \"user\", key = \"#userVO.id\", firstCache = @FirstCache(expireTime = 10), secondaryCache = @SecondaryCache(expireTime = 30)) public UserVO saveUser(UserVO userVO) { log.info(\"执行AnnotationBasedDemoService.saveUser()\"); return userVO; }","s":"@CachePut","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheput","p":111},{"i":130,"t":"删除缓存。 名称 默认值 说明 value 空字符串数组 缓存名称,cacheNames 的别名 cacheNames 空字符串数组 缓存名称 key 空字符串 缓存 key,支持 SpEL 表达式 allEntries false 是否删除缓存中所有数据,默认情况下是只删除关联 key 的缓存数据,当该参数设置成 true 时 key 参数将无效 @CacheEvict 范例代码 @CacheEvict(cacheNames = \"user\", key = \"#userId\") public void delUser(Long userId) { log.info(\"执行AnnotationBasedDemoService.delUser()\"); } @CacheEvict(cacheNames = \"user\", allEntries = true) public void delAllUsers() { log.info(\"执行AnnotationBasedDemoService.delAllUsers()\"); }","s":"@CacheEvict","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#cacheevict","p":111},{"i":132,"t":"可以直接使用 Laying Cahce 提供的 API 进行硬编码操作两级缓存,但不建议使用。这里就不做详细讲解了,可以在参考范例的 ApiBasedDemoService 类中找到相关的代码。","s":"基于 API 编程","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#基于-api-编程","p":111},{"i":134,"t":"需要 @EnableLayeringCache 注解的加持。如下代码所示。 @EnableLayeringCache @SpringBootApplication public class LayeringCachePanguApplication { public static void main(String[] args) { PanGuApplicationBuilder.init(LayeringCachePanguApplication.class).run(args); } } 快速 QA:可以禁用一级缓存,只使用二级缓存吗? 必须可以。设置 enableFirstCache = false 即可。 快速 QA:可以禁用二级缓存,只使用一级缓存吗? 可以。设置二级缓存 expireTime 为 0 即可。 快速 QA:我可以用 Spring Cache 的 RedisTemplate API 吗? 可以。Laying Cache 和 Spring Cache 相互隔离的,你只要在配置文件加入 Spring Cache 的配置,就可以注入 RedisTemplate 直接使用了。可以单独使用,也可以和 Laying Cache 混合使用。具体用法可以参考范例:pangu-examples-cache-single。","s":"启动入口","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#启动入口","p":111},{"i":136,"t":"pangu-examples-cache-layering:两级缓存(本地缓存 + Redis 集中缓存)范例 pangu-examples-cache-single:Spring Cache 一级缓存 API( RedisTemplate )范例","s":"本文相关范例源码","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#本文相关范例源码","p":111},{"i":138,"t":"继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。","s":"下一步","u":"/pangu-framework/docs/advanced-guide/layering-cache","h":"#下一步","p":111},{"i":140,"t":"盘古开发框架数据持久化 API 依赖 MyBatis Plus 提供。在 MyBatis 的基础上提供了强大的内置通用 Mapper CRUD 操作、支持 Lambda 表达式、内置屏蔽不通数据库方言差异的分页插件、自动填充字段值、多种主键自动生成策略、逻辑删除、乐观锁插件等。","s":"数据持久化","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"","p":139},{"i":142,"t":"盘古 Parent 基础模块 JDBC 模块 com.gitee.pulanos.pangu pangu-parent latest.version.xxx com.gitee.pulanos.pangu pangu-spring-boot-starter com.gitee.pulanos.pangu pangu-framework-jdbc-spring-boot-starter ","s":"安装相关盘古模块","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#安装相关盘古模块","p":139},{"i":144,"t":"为便于理解,本文基于本地配置的方式编写。若改为标准的Nacos配置中心模式,请参阅:配置中心章节。 application.properties application-dev.properties spring.profiles.active=${spring.profiles.active:dev} spring.application.name=pangu-examples-crud spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/pangu-examples?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true spring.datasource.username=root spring.datasource.password=root123456 mybatis-plus.mapperLocations=classpath*:/mapper/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl # 分页SQL方言数据库类型标识(缺省:自动识别) pangu.jdbc.db-type=mysql logging.level.root=INFO logging.level.com.gitee.pulanos.pangu=INFO logging.level.com.gitee.pulanos.pangu.showcases.crud.dao=debug","s":"本地配置","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#本地配置","p":139},{"i":146,"t":"基于实践经验,我们建议使用盘古代码生成器,而不是使用 Mybatis Plus 官方生成器。关于生成代码相关内容,请参阅 《代码生成器插件》 章节,这里不再赘述。(针对每一个数据表会生成一个 *Mapper.java 文件和一个 *Entity.java 文件)","s":"生成持久化所需的模版代码","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#生成持久化所需的模版代码","p":139},{"i":148,"t":"这里只是给出几个简单典型的操作代码,更多内容请参阅范例或阅读 Mybatis Plus 官方文档。","s":"基本数据持久化操作","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#基本数据持久化操作","p":139},{"i":150,"t":"UserEntity userEntity = new UserEntity(); userEntity.setName(\"XC\").setAge(18).setUserType(\"1\"); int row = userMapper.insert(userEntity); log.info(\"成功插入{}条数据。{}\", row, userEntity);","s":"新增","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#新增","p":139},{"i":152,"t":"//方式1 userMapper.updateById(new UserEntity().setId(1L).setName(\"XC2\")); //方式2 LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.set(UserEntity::getAge, 100); updateWrapper.eq(UserEntity::getId, 2L); userMapper.update(null, updateWrapper); //方式2简写 userMapper.update(null, Wrappers.lambdaUpdate().set(UserEntity::getName, \"XC2\").eq(UserEntity::getId, 3L)); //方式3 UserEntity userEntity = new UserEntity(); userEntity.setName(\"XC2\"); userMapper.update(userEntity, Wrappers.lambdaUpdate().eq(UserEntity::getId, 4L));","s":"修改","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#修改","p":139},{"i":154,"t":"//方式1 userMapper.deleteById(1000L); //方式2 userMapper.deleteBatchIds(Arrays.asList(1000L, 1001L)); //方式3 userMapper.delete(Wrappers.lambdaQuery().ge(UserEntity::getAge, 150)); userMapper.delete(Wrappers.lambdaQuery(UserEntity.class).ge(UserEntity::getAge, 150)); //方式4 userMapper.deleteById(new UserEntity().setId(2000L));","s":"删除","u":"/pangu-framework/docs/advanced-guide/data-persistance","h":"#删除","p":139},{"i":156,"t":"//方式1 UserEntity userEntity = userMapper.selectById(1L); //方式2 UserEntity userEntity1 = userMapper.selectOne(Wrappers.lambdaQuery().eq(UserEntity::getId, 1L)); //方式3 (需要注意对传入 ID 集合为非空判断,否则生成的 SQL in() 语法将报错) if(CollUtil.isNotEmpty(userIds)){ userEntities = userMapper.selectBatchIds(userIds); } //方式4 LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); //动态组合查询条件的简便写法 lambdaQueryWrapper.between(ObjectUtil.isNotEmpty(age), UserEntity::getAge, 1, age); lambdaQueryWrapper.eq(UserEntity::getUserType, \"1\"); lambdaQueryWrapper.orderByDesc(UserEntity::getId); List userEntities1 = userMapper.selectList(lambdaQueryWrapper); //方式5 LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(UserRoleEntity::getUserId, userId).orderByDesc(UserRoleEntity::getRoleId); List userRoleEntities = userRoleMapper.selectList(lambdaQueryWrapper); List roleIds = userRoleEntities.stream().map(UserRoleEntity::getRoleId).collect(Collectors.toList()); //方式6 List