spring的极简封装 springrain

Apache
Java
跨平台
2013-08-07
光石头

6.0.0 项目入口是springrain-system-web,基于Istio实现微服务,正在整理文档.

6.0.0 基于VUE前后端分离,使用JWT认证.前端项目是springrain-vue

实现了什么?

  • 不增加学习成本,像单体一样开发分布式微服务.
  • 不修改业务代码,可以实现单体,分层,微服务多种部署模式切换.
  • 集成seata分布式事务实现.

实现思路

  • 启动加载springbean时,先检查本地是否有实现,如果没有就启动GRPC远程调用.开发人员无感知.
  • 基于seata分布式事务实现.支持有注解和无注解(开发人员无感知,理论上有不同步风险,个人感觉做好日志,风险不大)混合使用.
  • 基于Istio实现微服务的发现,监控,熔断,限流.开发人员无感知.

限制

  • 接口和实现的命名强制规范.
  • 一个RPC接口只能有一个实现.
  • 分布式事务,一定要避免A服务update表t,RPC调用B服务,B服务也update表t.这样A等待B结果,B等待A释放锁,造成死锁.
  • 分布式无注解比较方便,理论上有不同步风险,个人感觉做好日志,风险不大

体验单体到分层切换

  • 修改springrain-system-web依赖springrain-system-service,不再依赖springrain-system-serviceimpl.
  • springrain-system-serviceimpl添加springrain-grpc-server依赖,启用org.springrain.SystemServiceImplApplication的@SpringBootApplication注解
  • seata-server的conf目录下file.conf,修改vgroup_mapping.my_test_tx_group = "default" 为 vgroup_mapping.seata_tx_group = "default",启动seata-server服务.
  • 启动springrain-system-serviceimpl
  • 启动springrain-system-web
  • 访问http://127.0.0.1:8080/ 账号admin,密码admin

项目名为springrain[春雨]我的个人博客是 http://www.weicms.net

文档

https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/doc

代码生成器

https://gitee.com/chunanyong/springrain/tree/master/springrain-gencode

sql脚本

https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/sql

springrain是spring/springboot的封装,springboot开发范例.

springrain是一个Maven项目,包含spring core,spring jdbc,spring mvc.

springrain自带代码生成器,能够生成对表的增删改查的逻辑代码,以及前台页面样式和js文件

项目只依赖spring,没有hibernate,struts,ibatis.

使用jwt认证.

数据库调优可以使用druid输出慢sql,比分析xml中的语句更直观,springrain所有的sql语句都使用Finder封装管理,只要查看Finder的引用即可.

一些测试案例:

//就极简而言,一个数据库只需要一个Service,就可以管理这个数据库的任意一张表 
//@Test  查询基本类型
public void testObject() throws Exception{
       // Finder finder=new Finder("select id from t_user where 1=1 ");
        Finder finder=Finder.getSelectFinder(User.class,"id").append(" WHERE 1=1 "); 
         finder.append("and id=:userId").setParam("userId", "admin");
        String id = baseDemoService.queryForObject(finder, String.class);
        System.out.println(id);

}

//@Test 查询一个对象
public void testObjectUser() throws Exception{
        //Finder finder=new Finder("select * from t_user where id=:userId order by id"); 
Finder finder=Finder.getSelectFinder(User.class).append(" WHERE  id=:userId order by id desc "); 
        finder.setParam("userId", "admin");
        User u = baseDemoService.queryForObject(finder, User.class);
        System.out.println(u.getName());

}
//@Test 查询分页
public void testMsSql() throws Exception{
        //Finder finder=new Finder("select * from t_user order by id");
        Finder finder=Finder.getSelectFinder(User.class).append(" order by id desc ");
        Listlist = baseDemoService.queryForList(finder, User.class, new Page(2));
        System.out.println(list.size());
        for(User s:list){
         System.out.println(s.getName());
         }
}



//@Test 调用数据库存储过程
public void testProc() throws Exception{
        Finder finder=new Finder();
        finder.setParam("unitId", 0);
        finder.setProcName("proc_up");
        Map queryObjectByProc = (Map) baseDemoService.queryObjectByProc(finder);
        System.out.println(queryObjectByProc.get("#update-count-10"));
        

}

//@Test 调用数据库函数
public void testFunction() throws Exception{
        Finder finder=new Finder();
        finder.setFunName("fun_userId");
        finder.setParam("userId", "admin");
        String userName= baseDemoService.queryForObjectByByFunction(finder,String.class);
        System.out.println(userName);
} 
的码云指数为
超过 的项目
加载中

评论(27)

taote
taote
好用
空云万里晴
空云万里晴
@屁屁果 什么服务器啊,半天打不开,主页。 。 springrain
K哥
K哥
能否改为maven支持呢?这样效果会更好吧! springrain
longrmlife
longrmlife
这个,有精力维护么?最怕有问题找不到人问... springrain
longrmlife
longrmlife
为什么是个这么大的工程呢,不直接放在github上管理么?弄个包好麻烦,都没法更新 springrain
longrmlife
longrmlife
提个建议,还是将工程放到代码管理平台去托管比较方便,我觉得就算是新手,这些东西肯定也是要会用的吧 springrain
longrmlife
longrmlife
这个框架跟springside有什么区别?内部有没有配置文件,全部都是注解么?是否有restful的例子 springrain
光石头
光石头 软件作者
光石头
光石头 软件作者
git@osc 我今天尝试合并一个分支文件时,执行了 git push maven 命令,结果 springrain的项目语言又从java变成javascript了
光石头
光石头 软件作者
springrain基于ShiroRedis实现了 session 共享,和容器无关,只要是标准的servlet容器都可以直接享受天然的sso和集群负载

springrain 5.0.0 发布,无感知的微服务

5.0.0 项目入口是 springrain-system-web,基于Istio实现微服务,正在整理文档. 实现了什么? 不增加学习成本,像单体一样开发分布式微服务. 不修改业务代码,可以实现单体,分层,微服务多种部署模...

01/17 15:31

springrain 1.1 发布,spring 的极简封装

经过2个月的测试修改,springrain1.1已经稳定,今日发布. 主要改动如下: 1.添加批量更新和保存的方法 2.添加maven分支 3.添加博客管理的demo 4.增加redis做为缓存实现 5.修改页面和代码生成器模...

2013/10/23 10:58

springrain 1.0 发布,spring的极简封装

springrain 1.0 发布了. springrain,spring的极简封装,spring的强大灵活+jfinal的开发效率 主要改动如下: 1.原项目9iuspring更名为springrain 2.升级spring至3.2.4 3.添加shiro控制权限(按钮...

2013/08/08 10:25

没有更多内容

加载失败,请刷新页面

没有更多内容

1
回答
请问如何对接cas单点登陆服务器cas-server

在springrain项目中web.xml和applicationcontext-shior.xml如何修改配置,修改了配置都没有生效

09/11 16:12
3
回答
springrain无法登陆的问题

最近有人反馈从git下载的springrain,导入eclipse无法正常登陆. 这个原因是由于mysql字符集造成的,查询用户的sql语句里有中文参数,...

2013/09/04 16:34
1
回答
springrain 的 session 问题

@光石头 你好,想跟你请教个问题: DEBUG: org.apache.shiro.web.servlet.SimpleCookie - Found 'S...

2016/01/20 11:34
28
回答
javaweb的框架和轻量级架构解决方案

看来oscer的讨论,我也把我的思路写出来吧. 文章的范围是 java web,并不是j2ee,主要是我很少接触EJB,对EJB没有发言权.废话少说,现在...

2013/09/04 10:22
1
回答
请问微信是不是没完成,能不能提供个说明文档,谢谢!

@光石头 你好,想跟你请教个问题:请问微信是不是没完成,能不能提供个说明文档,谢谢!

2014/11/13 20:34
3
回答
订单表包含客户信息,实体类怎么处理

@光石头 你好,想跟你请教个问题:我有一个订单表,还有一个客户表。我只想在订单表中保存客户的id,而不保存客户的具体信息。但是在页面上给用户创建订单时要提...

2014/10/09 09:34
1
回答
springrain可以根据实体生成库表吗

@光石头 你好,想跟你请教个问题:springrain可以根据实体生成库表吗

2014/08/31 19:44
1
回答
applicationContext-mvc-share.xml加载问题

@屁屁果 你好,想跟你请教个问题: http://git.oschina.net/chunanyong/springrain/blob/master/sp...

2014/04/15 11:30
1
回答
springrain order by处理

@屁屁果 你好,想跟你请教个问题:我这两天看了看你写的springrain框架,有个问题请教一下。如何在首次打开页面的时候按照我的order by执行 我...

2014/04/04 16:57
4
回答
Springrain 关于freemarker 公共文件的问题
光石头 的回答 2014/04/03 16:08
最佳答案
在 freemarker.properties 中 auto_import="/common/head.html" as h 每个freemarker默认都自动引入了 head.html 这个文件 所以每个页面都可以直接使用<@h......

没有更多内容

加载失败,请刷新页面

Spring学习实例4-Shiro 登录

1、修改web.xml,添加Shiro过滤器 <!-- Shiro过滤器 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</fil...

2016/07/01 09:00
100
0
springrain技术详解

springrain的技术分解系列博文,包含shiro权限控制,jdbc封装,代码生成器等技术细节

2013/12/11 11:02
7.4K
6
《跟我学Shiro》PDF完结版下载

历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以...

2015/05/21 16:08
161
0
《跟我学Shiro》系列教程PDF完结版下载

Shiro目录 第一章 Shiro简介 第二章 身份验证 第三章 授权 第四章 INI配置 第五章 编码/加密 第六章 Realm及相关对象 第七章 与Web集成 第八章 拦截器机制 第九章 JSP标签 第十章 会话管理 ...

2016/10/09 23:37
800
0
springrain vs jfianl的开发对比

废话不说,上实例 使用 jfinal最新版本 1.4 的 blog demo. 如果使用springrain 该怎么做呢? 总共分三步: 1.编写blog.sql 建表语句,花费2分钟左右时间 2.执行代码生成器,gen blog 并把生成文件...

2013/09/07 11:35
20.4K
4
跟我学Shiro电子书

内容来自电子书:《跟我学Shiro》教程PDF版,作者:张开涛

2018/05/01 18:42
66
1
再说spring比较重,臃肿的看此文!!!!!

springrain地址:http://git.oschina.net/chunanyong/springrain spring的强大灵活+jfinal的开发效率! 我的博客:http://www.weicms.net/2012/12/14/spring_super.html 在ssh中,我认为spring是...

2012/12/14 13:21
1K
1
手刃SSM框架

@(关键字)[Spring|SpringMVC|Mybatis] ------------------- [TOC] ##主要框架简介 **Spring**:[Spring官方文档](http://projects.spring.io/spring-framework/); **SpringMVC**:[SpringMV...

2016/10/17 22:08
29
0
spring shiro 求救

参考springrain,我的配置文件如下application-shiro.xml 我的realm: 现在在登录页面点击登录,就出现死循环,一直重复登录页面,提交页面

2013/08/28 09:56
187
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部