我曾想过如果由我负责一个项目,我会采用一下技术的组合:
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:是一个基于分布式文件存储的数据库,支持的数据结构类似json的bson格式,项目日志,用户评论等偏文件读取比较频繁的可使用,面向集合存储,易存储对象类型的数据,支持文件内部搜索,动态查询,查询功能还是很强大的。
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
安全认证权限:
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

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

  1. java设计一个形状shape_编程定义一个图形接口 Shape, 内含2个抽象方法 get... JAVA编程题:编一个程序包含一个接口 shape(该接......

    导航:网站首页 > 编程定义一个图形接口 Shape, 内含2个抽象方法 get... JAVA编程题:编一个程序包含一个接口 shape(该接... 编程定义一个图形接口 Shape, 内含2 ...

  2. Eclipse 答疑:为什么在 Eclipse 中,运行本程序却是另外一个程序的结果?

    文章目录 前言 一.错误产生场景 1.1.执行一个无误的 Java 程序(即产生结果的程序) 1.2.执行未出结果的 Java 程序 二.错误处理方式 总结 前言 你使用 Eclipse 敲代码的时候 ...

  3. 把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...

    package cn.io.file.demo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...

  4. java编程基础篇-- 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。

    编写一个程序,从键盘输入三个整数,求三个整数中的最小值. package Exam01;import java.util.Scanner;public class Topic03 {public st ...

  5. 一个程序员对另一个程序员的忠告

    自己关于所从事工作的一些看法,希望对你有用. 为什么要选择软件互联网行业         从宏观上来看,软件互联网工作者算得上是这个时代的弄潮儿,站在潮流的前沿,致力于为用户创造更加时尚便捷优质的生活 ...

  6. 程序人生--一个程序员对学弟学妹建议

    我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶.我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心.而许多搞不清指针是咋回事的B ...

  7. java 1000个线程_java,一个程序建立1000个线程,每一个线程加1到一个变量sum。

    1.程序建立1000个线程,有可能造成系统创建大量线程而导致消耗完系统内存,还会增加创建和销毁线程上所花的时间以及系统资源的开销 2.在创建线程数多的情况下,可以考虑使用线程池 以下是Java自带的几 ...

  8. java 操作系统 模拟 daima_编写一个程序,利用Java语言模拟操作系统进程调度管理...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.util.PriorityQueue; public class Process implements Comparable { ...

  9. java编数据添加修改程序_Java练习编写一个程序能够对学生对象进行插入、修改、删除、浏览、统计人数等功能。...

    展开全部 public class Student { private String id; private String name; private boolean sex; private Str ...

最新文章

  1. Android 内存管理 amp;Memory Leak amp; OOM 分析
  2. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...
  3. 【LeetCode】LeetCode之删除并获得点数——动态规划、排序+动态规划
  4. MySQL连表分组统计使用count查询出数据不准确问题解决方案
  5. linux添加文件后无法启动,linux安装后grub无法启动
  6. 紧跟月影大佬的步伐,一起来学习如何写好JS(上)
  7. pycharm python 模板配置_pycharm设置python脚本模板
  8. 混合云发展之路:前景广阔,巨头混战
  9. 模式学习(1):Decorator装饰者模式
  10. 记一次java-selenium自动抢红包最简单案例1
  11. 少走弯路,给3~5年java程序员的唯一一条建议
  12. 谷歌金山词霸更新历史
  13. Java执行语句--------04
  14. ios 操作通讯录联系人
  15. 19隆冬的倔强(updating)
  16. java采用Process.destroy无法停止子进程
  17. 计算机信息处理技术的发展历程,中文信息处理技术发展简史.docx
  18. 浅谈数据中心综合布线运维管理方式发展史
  19. 如何把视频转换成gif动图
  20. 第五章 循环结构程序设计习题(2)

热门文章

  1. 一文看懂:零代码平台是什么?怎么选?
  2. uni-app 打包H5项目
  3. mysql 配置定时任务_Mysql定时任务
  4. PostgreSQL权限修改 : ALTER DEFAULT PRIVILEGES
  5. mcinabox运行库下载_MCinaBox运行库下载-MCinaBox启动器官网版下载v0.1.3- 游侠下载站...
  6. 一汽轿车拟增资摩拜出行;甘薇出售资产代夫偿债;小米越南店正式开业丨价值早报
  7. 2018年首篇,带大家一起学习视图拖拽功能的源码
  8. 3D打印:亮光黑漆面效果
  9. 一个留学生的自白:清华vsMIT
  10. 企业ERP管理系统使用说明