内容简介:Aooms一款基于SpringCloud的微服务基础开发平台,旨在降低SpringCloud的复杂度,像使用JFinal一样简单(本人是JFinal用户,从1.9版本开始现在也一直在使用,因此部分实现思路会借鉴JFinal的一些模式,感谢@JFinal作者波总提供这么优秀的框架),包含微服务相关的完整解决方案同时附加有权限管理、报表自定义、工作流、Cms等套件,可直接使用,Aooms基于Apache Licence 2.0开源协议,关于编写此框架的一些初衷,可通过此处 ( 链接 )了解。(1)极简Cont
Aooms 极速微服务开发,像JFinal一样简单 1.0.0-alpha.1
一、Aooms
一款基于SpringCloud的微服务基础开发平台,旨在降低SpringCloud的复杂度,像使用JFinal一样简单(本人是JFinal用户,从1.9版本开始现在也一直在使用,因此部分实现思路会借鉴JFinal的一些模式,感谢@JFinal作者波总提供这么优秀的框架),包含微服务相关的完整解决方案同时附加有权限管理、报表自定义、工作流、Cms等套件,可直接使用,Aooms基于Apache Licence 2.0开源协议,关于编写此框架的一些初衷,可通过此处 ( 链接 )了解。
二、核心功能
(1)极简Controller
(2)基于sharding-sphere的多数据源支持
(3)基于Mybatis 实现的 Db + Record 极简模式,附带物理分页实现
(4)基于Consul的服务注册、发现
(5)服务熔断、限流
(6)服务客户端、http客户端
(7)内置各种ID生成器(UUID、snowflake)
(8)穿透一切的数据对象DataBoss
(9)基于J2Cache的缓存
(10) 其他更多功能,等你发现.......
三、1.0.0-alpha.1 更新内容
(1)[修复] AoomsGlobalErrorController 不加载问题
(2)[新增] example添加更多示例(服务调用、http调用、多数据源、分表、缓存使用、服务熔断降级、配置文件读取)
(3)[修改] 全局error页面结构调整
(4)[修复] DynamicDataSourceAspect 失效问题
(5)[新增] DataResult添加getRecordList 方法
(6)[新增] WebMvcConfigurer 默认实现类AoomsWebMvcConfigurer
四、简单Demo
(1)一睹helloworld
package net.aooms.example.controller; import net.aooms.core.web.AoomsAbstractController; import net.aooms.example.vo.UserVo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; /** * HelloWorld * Created by 风象南(cheereebo) on 2018-09-12 */ @RestController public class HelloWorldController extends AoomsAbstractController { /** * 基础访问 */ @RequestMapping("/hello") public void hello(){ String str = "hello world !"; this.renderText(str); }; /** * 获取基本参数 */ @RequestMapping("/hello2") public void hello2(){ String id = getParaString("id"); logger.info("id = {}" , id); this.renderText(id); }; /** * 获取路径参数 */ @RequestMapping("/hello/{id}") public void hello3(){ String id = getPathString("id"); logger.info("id = {}" , id); this.renderText(id); }; /** * 上传文件 */ @RequestMapping("/hello4") public void hello4(){ MultipartFile multipartFile = this.getParaFile("upload"); logger.info("fileName = {}", multipartFile.getName()); this.renderText("success"); }; /** * json输出 */ @RequestMapping("/hello5") public void hello5(){ UserVo userVo = new UserVo(); userVo.setName("zhangsan"); setResultValue("userVo",userVo); // 输出json this.renderJson(); // this.renderJson(); 也可省略不写,默认会使用JSONRender }; /** * json输出 */ @RequestMapping("/hello6") public void hello6(){ UserVo userVo = new UserVo(); userVo.setName("zhangsan"); this.renderJson(userVo); }; /** * 文件下载 */ @RequestMapping("/hello7") public void hello7(){ this.renderFile("application.yml", this.getClass().getResourceAsStream("/application.yml")); }; /** * 图片输出 * @return */ @RequestMapping("/hello8") public void hello8(){ this.renderImage("F:/1.png","F:/default.png"); }; /** * html输出 * @return */ @RequestMapping("/hello9") public void hello9(){ this.renderHtml("<html><h1>标题</h1> <script>alert('hello world !');</script> </html>"); }; /** * 模版页面输出 * @return */ @RequestMapping("/hello10") public void hello10(){ ModelAndView mv = new ModelAndView(); mv.addObject("name","lisi"); mv.setViewName("/demo.html"); this.renderThymeleaf(mv); }; /** * 重定向 * @return */ @GetMapping("/hello11") public void hello11(){ this.redirect("https://www.oschina.net"); }; }
(2)一个简单的CRUD
package net.aooms.example.controller; import net.aooms.core.web.AoomsAbstractController; import net.aooms.example.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * simple crud * Created by 风象南(cheereebo) on 2018-09-12 */ @RestController public class CRUDController extends AoomsAbstractController { @Autowired private UserService userService; /** * 查询 * @return */ @RequestMapping("/findList") public void findList(){ userService.findList(); }; /** * 新增 * @return */ @RequestMapping("/insert") public void insert(){ userService.insert(); }; /** * 修改 * @return */ @RequestMapping("/update") public void update(){ userService.update(); }; /** * 删除 * @return */ @RequestMapping("/delete") public void delete(){ userService.delete(); }; }
package net.aooms.example.service; import net.aooms.core.AoomsConstants; import net.aooms.core.id.IDGenerator; import net.aooms.core.module.mybatis.Db; import net.aooms.core.module.mybatis.SqlPara; import net.aooms.core.module.mybatis.record.PagingRecord; import net.aooms.core.module.mybatis.record.Record; import net.aooms.core.service.GenericService; import net.aooms.example.vo.UserVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * simple crud service * Created by 风象南(cheereebo) on 2018-09-17 */ @Service public class UserService extends GenericService { @Autowired private Db db; public void findList() { PagingRecord pagingRecord = db.findList("UserMapper.findList", SqlPara.fromDataBoss()); { // 返回值 this.setResultValue(AoomsConstants.Result.DATA,pagingRecord); } } @Transactional public void insert() { // record 模式 Record record1 = Record.NEW(); record1.set(AoomsConstants.ID,IDGenerator.getLongValue()); record1.set("name","lisi3"); db.insert("user",record1); UserVo userVo = new UserVo(); userVo.setId(IDGenerator.getLongValue()); userVo.setName("wangwu"); Record record2 = Record.NEW().fromBean(userVo); // fromDataBoss(prefix) 该方法可将参数 满足model.xxx 规则的参数构造成record属性 // 例:http://xxx/insert?record.id=1&record.name=zhangsan&model.role=3&code=02, // 通过 fromDataBoss 将提取id,name,role三个属性的值,不会提取code值 record2.fromDataBoss("model"); // model为参数prefix 格式:model.role , 将会通过model取到role值 db.insert("user",record2); } @Transactional public void update() { // record 模式 Record record = db.findByPrimaryKey("user","root"); if(record != null){ record.set("name","zhaoliu"); db.update("user",record); } } @Transactional public void delete() { db.deleteByPrimaryKey("user","root1"); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="UserMapper"> <!-- 二级缓存 --> <cache type="net.aooms.core.module.mybatis.J2CacheSupport" eviction="LRU" flushInterval="60000" size="512" readOnly="true"/> <sql id="columns"> id,name </sql> <select id="findList" resultType="net.aooms.core.module.mybatis.record.Record"> SELECT <include refid="columns" /> FROM USER </select> <select id="updateById" resultType="int"> update user set name = '123' where id = #{id} </select> <select id="findAll" resultType="net.aooms.core.module.mybatis.record.Record"> select * from t_order </select> </mapper>
五、详细了解
请查看 https://gitee.com/cyb-javaer/Aooms -> aooms-example-quickstart
六、1.0.0-alpha.2 预告
(1)实现 aooms-rbac 功能(登陆、机构管理、模块管理、角色管理、用户管理、功能权限、资源权限、数据权限等)
(2)aooms-blog 个人博客搭建,作为生产环境的试验品
以上所述就是小编给大家介绍的《Aooms 极速微服务开发 1.0.0-alpha.1,像 JFinal 一样简单》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 微服务解决方案 Go微服务开发利器
- GO-Grpc微服务开发二 服务编写
- 微服务快速开发框架
- .net 开发系统服务入门
- GO-Grpc微服务开发五 服务调用优化
- 用 Go 开发接口服务--按需写 service 服务层逻辑
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社群营销与运营/互联网+新媒体营销规划丛书
秦阳//秋叶|总主编:秋叶 / 人民邮电出版社 / 2017-5 / 45.00元
《社群营销与运营》共分6章。第1章重点介绍了社群营销的起因、概念、构成、价值和评估模型,引导读者全面认识社群以及社群营销;第2章介绍了如何从无到有、从小到大建设一个社群的手法和注意事项;第3章重点介绍维持社群活跃度的各种技巧;第4章介绍了组织一场社群线下活动五个阶段的执行方案;第5章介绍了如何从无到有、由弱到强地构建社群运营团队;第6章介绍如何正确看待社群商业变现以及社群商业变现的三大模式和四个基......一起来看看 《社群营销与运营/互联网+新媒体营销规划丛书》 这本书的介绍吧!