springrain 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
springrain 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
springrain 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
springrain 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
springrain 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开发厂商
地区 国产
提 交 者 光石头
适用人群 未知
收录时间 2013-08-07

软件简介

实现了什么?

  • 不增加学习成本,像单体一样开发分布式微服务.
  • 不修改业务代码,可以实现单体,分层,微服务多种部署模式切换.
  • 集成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);
} 
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (27)

加载中
打分: 力荐
好用
2017/05/10 17:10
回复
举报
@屁屁果 什么服务器啊,半天打不开,主页。 。 springrain
2013/09/03 08:53
回复
举报
能否改为maven支持呢?这样效果会更好吧! springrain
2013/09/07 07:09
回复
举报
这个,有精力维护么?最怕有问题找不到人问... springrain
2013/09/09 10:48
回复
举报
为什么是个这么大的工程呢,不直接放在github上管理么?弄个包好麻烦,都没法更新 springrain
2013/09/09 10:49
回复
举报
提个建议,还是将工程放到代码管理平台去托管比较方便,我觉得就算是新手,这些东西肯定也是要会用的吧 springrain
2013/09/09 11:08
回复
举报
这个框架跟springside有什么区别?内部有没有配置文件,全部都是注解么?是否有restful的例子 springrain
2013/09/09 11:09
回复
举报
光石头软件作者
2013/09/12 15:30
回复
举报
光石头软件作者
git@osc 我今天尝试合并一个分支文件时,执行了 git push maven 命令,结果 springrain的项目语言又从java变成javascript了
2013/09/12 17:39
回复
举报
光石头软件作者
springrain基于ShiroRedis实现了 session 共享,和容器无关,只要是标准的servlet容器都可以直接享受天然的sso和集群负载
2013/10/25 18:34
回复
举报
更多评论
发表于大前端专区
2019/01/17 15:31

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

5.0.0 项目入口是 springrain-system-web,基于Istio实现微服务,正在整理文档. 实现了什么? 不增加学习成本,像单体一样开发分布式微服务. 不修改业务代码,可以实现单体,分层,微服务多种部署模式切换. 内置同步的分布式事务实现. 实现思路 启动加载springbean时,先检查本地是否有实现,如果没有就启动RPC远程调用.整个过程对...

8
45
发表了资讯
2013/10/23 00:00

springrain 1.1 发布,spring 的极简封装

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

18
31
发表了资讯
2013/08/08 00:00

springrain 1.0 发布,spring的极简封装

springrain 1.0 发布了. springrain,spring的极简封装,spring的强大灵活+jfinal的开发效率 主要改动如下: 1.原项目9iuspring更名为springrain 2.升级spring至3.2.4 3.添加shiro控制权限(按钮级) 4 .完善代码生成器,并生成默认权限的sql语句 5.优化页面显示,并实现默认的demo 6.增加新的扩展方法,增强灵活性和定制性 7.默...

34
29
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于软件架构专区
2013/12/11 11:02

springrain技术详解

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

7
32
发表于软件架构专区
2020/09/15 11:42

springrain微服务架构

目标 以前单位主要是外包项目为主,在设计微服务架构时需要满足以下条件 技术组件模块化,按需依赖加载 对开发人员要求低,2年经验满足业务开发. 学习成本低,正常情况2周就要能够上手开发业务. 方便开发运维调试,最好...

0
0
发表于开发技能专区
2013/09/07 11:35

springrain vs jfianl的开发对比

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

21
15
发表了博客
2015/05/21 16:08

《跟我学Shiro》PDF完结版下载

历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。 点击下载《跟我学Shiro》教程PDF版。学习交流使用,请勿用于其他任何商业用途。 Sh...

0
6
发表于开发技能专区
2016/10/09 23:37

《跟我学Shiro》系列教程PDF完结版下载

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

0
24
发表了博客
2016/07/01 09:00

Spring学习实例4-Shiro 登录

1、修改web.xml,添加Shiro过滤器   <!-- Shiro过滤器 -->   <filter>     <filter-name>shiroFilter</filter-name>     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>     <init-param>       <!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由Servlet...

0
8
发表于服务端专区
2018/05/01 18:42

跟我学Shiro电子书

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

0
1
发表了博客
2018/01/19 10:57

shiro 中的filterChainDefinitions详解(转)

<div id="article_content" class="article_content csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post" style="overflow: hidden;"> <p><span style="font-size:14px"><span style="white-space:pre"></span>springrain使用shiro控制权限,配置<span style="color:rgb(51,51,51); font-fa...

0
0
2012/12/14 13:21

再说spring比较重,臃肿的看此文!!!!!

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

18
13
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于服务端专区
2019/09/11 16:12

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

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

2
1
发表了问答
2013/09/04 16:34

springrain无法登陆的问题

最近有人反馈从git下载的springrain,导入eclipse无法正常登陆. 这个原因是由于mysql字符集造成的,查询用户的sql语句里有中文参数,因为mysql的字符集问题,无法正常执行 请检查下mysql的字符集配置,使其支持中文的查询参数

7
0
发表了问答
2016/01/20 11:34

springrain 的 session 问题

@光石头 你好,想跟你请教个问题: DEBUG: org.apache.shiro.web.servlet.SimpleCookie - Found 'SHAREJSESSIONID' cookie value [ed45e3e1-4c00-4e9e-9018-917f6ac59176] DEBUG: org.apache.shiro.web.servlet.SimpleCookie - Found 'SHAREJSESSIONID' cookie value [ed45e3e1-4c00-4e9e-9018-917f6ac59176] DEBUG: org...

1
0
发表了问答
2013/09/04 10:22

javaweb的框架和轻量级架构解决方案

看来oscer的讨论,我也把我的思路写出来吧. 文章的范围是 java web,并不是j2ee,主要是我很少接触EJB,对EJB没有发言权.废话少说,现在开扒. 说起java框架那是锣鼓喧天鞭炮齐鸣,纷纷色色,层次不穷,javaweb的主流框架有 spring,spring mvc,struts,hibernate,mybatis(ibatis),spring jdbc 但是ssh的臃肿,庞大复杂,难于维护的弊...

87
27
发表了问答
2014/11/13 20:34

请问微信是不是没完成,能不能提供个说明文档,谢谢!

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

2
0
发表了问答
2014/10/09 09:34

订单表包含客户信息,实体类怎么处理

@光石头 你好,想跟你请教个问题:我有一个订单表,还有一个客户表。我只想在订单表中保存客户的id,而不保存客户的具体信息。但是在页面上给用户创建订单时要提供订单包含的客户信息,提交表单时,客户的信息还是在客户表,订单表中只有id。这样做的话,订单表对应的实体类该怎么处理?

6
0
发表了问答
2014/08/31 19:44

springrain可以根据实体生成库表吗

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

1
0
发表了问答
2014/04/15 11:30

applicationContext-mvc-share.xml加载问题

@屁屁果 你好,想跟你请教个问题: http://git.oschina.net/chunanyong/springrain/blob/master/springrain/resources/applicationContext.xml 里面的<import resource="classpath*:mvc/applicationContext-mvc-share.xml" /> 和http://git.oschina.net/chunanyong/springrain/blob/maven/springrain/src/main/resources...

1
0
发表了问答
2014/04/04 16:57

springrain order by处理

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

1
0
发表了问答
2014/04/03 13:57

Springrain 关于freemarker 公共文件的问题

@屁屁果 你好,想跟你请教个问题: 关于springrain有些问题请教?例如common文件夹里面的公共内容需要设置变成共享所有文件吗?怎么设置?

10
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
27 评论
225 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部