2017-java程序媛的流水账-一个程序媛的不断学习

我曾想过如果由我负责一个项目,我会采用一下技术的组合:
1.项目规模中小型,需求改动较多,对技术有一定追求,同时要求快速
spring boot,
spring data jpa(考虑团队成员技术成熟度可考虑mybatis),
mysql,
shiro + cas(考虑权限控制和单点登入 这需要较为成熟技术方可进入,不然建议自己实现简单的token)
 
2.项目中规中矩,偏管理系统,不过分追求技术
springmvc + maven多模块(spring boot)
mybatis(sql语句较为灵活)
mysql
 
3.项目规模较大,服务较多,通信频繁
spring boot
spring data jpa(mysql 统一使用之中方可)
mysql
redis, mongodb(spring集成方便,典型的键值对高速内存数据库和文件存储数据库)
cas + shiro(对比spring security 较轻和集成简单)
rabbitmq(spring cloud选择,涉及到spring cloud bus 默认使用),grpc(可支持高并发和负载均衡)
eureka(服务发现和注册 ap)
根据需求可慢慢接入其他框架
 
 
对于协调前后对接,我考虑为:
swagge(api 文档管理维护调用,取代postman等),
git+maven+nexus+jenkins(搭建一套自动构建打包发布环境,节省每次拉取代码打包构建发布的时间)
 
理由如下分析:
 
 
对比ssh,springmvc,spring boot
ssh:这个是我初入大学的时候学的框架,Spring+Struts+Hibernate,这几个分开来看搭建框架麻烦,太重太繁琐的各种xml配置,Hibernate相对于其他orm来说需要注意的事项也比较多,如一级,二级缓存,事务之类的,现在几乎都看不到这种组合了。
 
springmvc:毕业后开始用springmvc,对于这个发现搭建项目的时候就快多了,比如处理ajax信息返回很方面,直接用注解返回响应信息,恩,至少在接触spring boot之前,我很喜欢用springmvc + maven多项目模块的形式搭建项目。
 
spring boot:就是这么一个喜新厌旧的人哇,接触spring boot之后发现,基本上如果是使用的是ide是idea就是一键式的搭建简单的服务,没有xml的配置就可以简单的完成一个restful 接口,并且开始使用yml这种形式的配置文件,相对于properties较为有层次感,还有神奇的starts一族的jar包,简单的解决jar依赖冲突快速引入web,orm等,注意约定优于配置。
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
 
 
对比hibernate,mybatis,spring data jpa
一开始我学的就是hibernate,第一次知道数据库表与表之间不要设置外键,其关系应用系统维护就好,它的优点:
1.比起mybatis,hibernate的封装程度较高,使得对象-关系映射变得较为简单,说直白点就是把数据库的表当做对象看待,如果我的对象增加了属性,我并不需要去数据库更改字段,只需要在类文件中加上该属性(前提是xml 的配置文件设置是否更新数据库这个属性设置为true)
 
2.它有较为完善的缓存机制,如session一级缓存,sessionFactory二级缓存(分为内外两种),对于外部缓存一般使用Ehcache,它们之间的集成比较简单,简单点说就是比如一个查询语句,在dao接口层使用关于cache的注解则可以放入这次查询的数据集合在二级缓存中,下次再次调用这个接口的时候则会先查询二级缓存,如果没有方可查询数据库
 
缺点:
1.肯定有人说配置麻烦,xml文件过多
2.维护对象和关系映射需要一定的基础,maybe要有点设计的感念
3.缓存虽然可能用的少,但是如果用起来还是要小心,很容易出现问题(亲测)
4.事务控制
 
接下来实习啦,开始接触mybatis,它的优点:
1.对于映射关系简单的使用 resultMap 则可对应,因为采用xml的形式,所以对于sql语句可进行更为细致的SQL优化,可以减少查询字段。
2.都说上手容易(恩,我要吐槽下,如果数据库字段设计要为频繁的更改呢,接着下看)
 
 
缺点:
1.在我接触使用mybatis-generator-maven-plugin这个插件之前,每次更改数据库字段都是非常痛苦的机械化在xml文件中一点点修改,因为当年无知的自己在自动化生成xml之后尽然去写了个别查询语句,所以导致我修改字段后还有保留自己手写的sql,傻啊,现在使用example,Criteria,再也不用担心更改字段了(除非很吊的存储过程,当然很少见)
 
2.缓存问题了,我接触到的几乎都没什么缓存,mybatis对缓存的支持有点差
 
 
spring data jpa,底层依旧使用了 Hibernate ,对jpa规范的再次封装,在某些可偷懒的时候我是特别喜欢使用的。优点:
1.基于Spring Data的数据访问对象, 只需定义和编写一些查询方法的接口,dao层代码少,把约定优于配置用到了一定高度,方法按约定好的名字规范就可以啦。
2.对于复杂一点的可使用@query之类的
3.spring boot 对其支持集成相当简单
 
缺点:
1.底层依旧是Hibernate ,封装程度高,同时也会带来偏向于底层的调优比较麻烦,比如缓存机制
 
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
sql和nosql
mybatis:现在常见的sql数据库一般为mybatis,对于sql调优方面,这块我知道的较少,比如sql语句的where条件是从后开始执行的所以越是精准的判断越是要放置在后,简单知道分库分表 sharding-jdbc框架,停留小demo层次,实际项目并未操作过
 
 
redis:接触使用redis 是在做验证码发送这个需求中,redis内部支持五中数据类型,String一般用于保存用户登录session,验证码之类的信息,hash适用于保存对象信息,List队列优选(短信队列),set
无序哈希去重,sorted set有序哈希,权重排序,我现在项目中偏爱使用spring集合的RedisTemplate,它对redis 的client操作封装后使用简单容易上手。不过使用过程中redis对内存要求比较高,服务器选择和配置根据实际情况配置选择。
 
mongodb:是一个基于分布式文件存储的数据库,支持的数据结构类似 jsonbson格式,项目日志,用户评论等偏文件读取比较频繁的可使用,面向集合存储,易存储对象类型的数据,支持文件内部搜索,动态查询,查询功能还是很强大的。
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
安全认证权限:
cas:安全认证,实现了单点登录的项目中遇到并学习,并对cas进行二次开发,就拿充电桩项目来说,用户访问前端页面,在前端发起请求在后台.后台接收到请求,拿到session和service,session里有ticket,然后在后台内部使用grpc 的方式去访问cas服务器,判断其ticket是否为空或者已经过期,如果已经过期则跳转到登入页面,如果为正常状态则可继续访问,在应用端要注意的就是cas 的配置文件中要实现一些必要的方法比如casAuthFilterRegistration,和AuthenticationRedirectStrategy重定向配置等,资料可查。
 
spring security :权限控制框架,都说和shiro相比spring secutity相对来说显得的配置繁琐笨重,不过可能是我比较菜一点,没有完全体会到shiro 的轻便,不过在配置方便shiro确实是较为简便,最开始接触权限控制框架确实为spring secutity,不过后来学习使用rest api 的时候,我发现spring secutity对rest api并没有shiro强大,如restful接口我喜欢是 get(查询),put(修改),post(新增),delete(删除),而spring secutity我只控制到角色,权限这层,进一步对rest的get,put等访问的细分shiro略胜一筹(rest[user:create])。
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
服务间通信
netty:提供异步的、 事件驱动的网络应用程序框架和工具,基于nio(同步非阻塞),可以顺便了解一下bio(同步堵塞),aio(异步非堵塞),第一次接触netty是充电桩项目,后台通过与桩建立tcp连接进行消息通讯。Reactor模型主要由多路复用器(Acceptor)、事件分发器(Dispatcher)、事件处理器(Handler)组成,可以分为三种。同时也有单线程,多线程,主从多线程(这个理论我也没有完全明白)。简单实现:实例化两个NioEventLoopGroup,通常第一个称为“boss”,用来accept客户端连接,另一个称为“worker”,处理客户端数据的读写操作,ServerBootstrap 是启动服务的辅助类,channel,然后由于事件驱动所以要为其添加handler
 
 
grpc:GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x,内部自己实现负载均衡,HTTP/2协议标准而设计,基于ProtoBuf,相对比thrif而言更具有未来的趋势,资料较多,同时生成的代码少,同时thrif最大的特色为多语言服务,现实并不会一个系统较多的语言,并且它的每种语言都略微不同。
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
部署运维( DevOps)
git: 从git仓库拉取相对于分支的代码(我刚接触git在一个对代码管理较为严格的团队,要求能正确的切换分支拉取代码,提交分支,合并分支,节点不能混乱,要求能按功能回滚,嗯,还好当时用的是hibernate,数据库表结构不需要过多操心,心酸)
 
maven + nexus:jar版本等管理,本地私服仓库可规避网络等因素
 
jenkins:持续集成,我偏认为它是一个脚本集成工具,协调各种脚本调用和资源传输
 
 
 
 
 
 
 
突发奇想开始写文章,看过的人都说是流水账,嗯嗯,我知道,不过用于日常随记,第一步~
 
 
 
 

转载于:https://www.cnblogs.com/eloise/p/7550941.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值