微服务

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

前后分离

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

实现了什么?

不增加学习成本,像单体一样开发分布式微服务.

不修改业务代码,可以实现单体,分层,微服务多种部署模式切换.

集成seata分布式事务实现.

实现思路

启动加载springbean时,先检查本地是否有实现,如果没有就启动GRPC远程调用.开发人员无感知.

基于seata分布式事务实现.支持有注解和无注解(开发人员无感知,理论上有不同步风险,个人感觉做好日志,风险不大)混合使用.

基于K8S的Service实现服务注册和发现,ConfigMap实现配置中心.开发人员无感知.

基于Istio实现微服务的发现,监控,熔断,限流.开发人员无感知.

限制

接口和实现的命名强制规范.

一个RPC接口只能有一个实现.

分布式事务,一定要避免A服务update表t,RPC调用B服务,B服务也update表t.这样A等待B结果,B等待A释放锁,造成死锁.

分布式无注解比较方便,理论上有不同步风险,个人感觉做好日志,风险不大

Service层不可以使用Servlet API,例如 HttpRequest

体验单体到分层切换

修改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

文档

代码生成器

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);

}

springrain java_springrain相关推荐

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

    为什么80%的码农都做不了架构师?>>>    springrain地址:http://git.oschina.net/chunanyong/springrain spring的强大 ...

  2. 碰到问题集锦(简述)1

    1.What is the UI Framework?  我们常说的类库是纯粹的各种方法的集合,不涉及界面 :UI框架(组件库),它涉及界面要引入css,使用规定的标签属性就可基于模板开发网站. 2. ...

  3. jsr303jsp页面怎么显示错误信息_jsp校验信息不显示

    Apache Shiro 好像支持 CAS 的. ######听起来有点高深,能不能问下lz做这个是为了什么功能?###### 引用来自"hantsy"的答案 Apache Shi ...

  4. Oracle中row_number()、rank()、dense_rank() 的区别

    link:https://www.cnblogs.com/qiuting/p/7880500.html 转载于:https://www.cnblogs.com/Spring-Rain/p/971621 ...

  5. 2014 年度 Git@OSC 最热门的 50 个项目

    2019独角兽企业重金招聘Python工程师标准>>> 2014 年度 Git@OSC 最热门的 50 个项目 oschina 发布于: 2015年01月13日 ( 97评) 分享到 ...

  6. Java编码规范注意

    编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...

  7. android 指定资源id,Android 通过名称获取资源ID

    当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ...

  8. 0505.Net基础班第十三天(面向对象多态)

    1.c#中的访问修饰符 public :公开的公共的 private:私有的,只能在当前类的内部访问 protected:受保护的,只能在当前类的内部以及该类的子类中访问. internal:只能在当 ...

  9. 我要注意的Java编码规范

    编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...

最新文章

  1. 访问HTTP网址的两种方式
  2. htmlbuilder php phantomjs
  3. plsql(轻量版)_游标的使用1
  4. centos7 rabbitmq安装/配置
  5. android commit apply,关于SharedPreference的commit和apply和ANR
  6. git灰度发布版本_Git发布2.30版本
  7. python的数据结构包括那些_python算法与数据结构-什么是数据结构
  8. 第二章 获取变量的相关统计指标
  9. pdns backend mysql_安装PowerDNS(与MySQL后端)和Poweradmin在Debian蚀刻
  10. ClassPathResource详解
  11. 排序算法--冒泡排序
  12. vue生成静态html文件_是否可以将Vue.js模板编译为静态HTML和CSS文件?
  13. selenium: 登录QQ空间并破解滑块验证
  14. 生物信息相关国家自然科学基金汇总(持续更新中)
  15. 国内外著名黑客杂志 《转》
  16. 多个工作表数据汇总怎么做?
  17. Ghidra Java API报NoClassDefFoundError的解决方法
  18. 今日头条最新_signature
  19. 数字IC后端设计如何快速入门?(内附学习视频)
  20. 网贷数据爬取及据分析

热门文章

  1. 分布式消息流平台:不要只想着Kafka,还有Pulsar
  2. 关于单元测试的那些事儿,Mockito 都能帮你解决
  3. 等保数据备份和恢复关键点,这些你该知道!
  4. 【华为云技术分享】玩转华为物联网IoTDA服务系列三-自动售货机销售分析场景示例
  5. 是什么造成了数据库的卡顿
  6. 【Python3网络爬虫开发实战】1.3.2-Beautiful Soup的安装
  7. ajax与DOM的使用,AJAX和DOM的运行经验
  8. matlab 动画_MATLAB作图实例:51:表面动画
  9. 彻底理解MapReduce shuffle过程原理
  10. mongodb数组更新操作符$addToSet