Java项目框架搭建系列(Java学习路线)
前言:
已经工作4年,真是时间飞逝。
其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了。
你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务逻辑开发。
如果你更努力一点,你可能有去摸索一些配置的作用,一些问题的排查会更有经验和自己的想法。
如果你好奇心更强一点,可能会去了解一些框架的原理,各个框架之间是怎么相互协助工作的。自己能否从无到有将这些框架串联起来。
想写一系列这样的文章:将Java项目开发过程中的一些框架,如何一步步串联起来,并且结合源码探索其核心部分原理。以及项目从小项目演变到大项目的过程中,需要开发框架以及结构变化。以及特定业务场景设计。具体概请见下文。
大概使用的开发框架及工具:
基本工具:Eclipse、Maven、Tomcat
前端:Jquery、Vue.js、 Element
后台核心框架:Spring、SpringMVC、MyBatis
后台辅助框架:日志框架Logback、安全框架Shiro、任务调度框架Quartz
分布式框架:Dubbo、RabbitMQ、Redis…………..
除了这些框架还有一些特定业务场景,以及高扩展高可用的架构演变过程等等。
主要分为下面三个阶段博客提纲。
阶段一:集中式基本架构
一、基本工具:Eclipse、Maven、Tomcat(此篇不写博客,关于Maven猿友可自行网上安装教程及博客)
二、Spring介绍及探索:主要就是依赖注入以及AOP原理,Spring使用大多以配置为主,因此从配置入手,结合源码探索其原理。
三、SpringMVC:以实例入手,结合源码探索其主要原理。
四、Mybatis:以实例入手,结合源码以及分页插件拓展探索其用法及原理。
五、日志框架Logback:结合实例、配置、源码了解其原理,并对Logback封装,使得更加符合实际业务需求。
六、前端框架Vue.js+Element使用,Jquery默认猿友已经会用了。
七、安全框架Shiro:主要登录及权限认证实例入手,探索其用法。
八、任务调度框架Quartz:实例+配置+源码探索用法及基本原理。
九、异步线程池使用及业务场景。
十、数据库事务实例及应用场景
十一、ehcache本地缓存实例及应用场景。
之所以阶段一叫集中式基本架构,是因为这种结构适合前端代码,后台代码在一个工程,部署到一台服务器上里面。带来的问题有:性能问题、工程十分臃肿、风险很大、不好迭代。
当然性能问题可以通过集群方式,就是部署到多台机器上,然后根据用户访问的ip进行分流到不同机器响应。目前web项目大多采用这种做法。
但是一旦业务及功能模块多了起来,需要快速迭代,必然要模块拆分。因此必须采用分布式架构。
分布式架构一般根据功能进行划分模块,以电商为例:对外web端一个模块、管理web端、商品后台一个模块、订单支付后台等一个模块、用户信息后台一个模块。各个模块之间通过接口服务实时通信,异步通过MQ方式通信、缓存也需要使用分布式缓存框架。
接下来我们看下阶段二的博客提纲。
阶段二:高扩展、高性能、高可用、快速迭代分布式架构
一、分布式服务框架Dubbo:主要实例以及原理探索。
二、日志流水透传:让同一个请求经过的多个模块的日志流水保持一致。
三、分布式消息框架RabbitMQ:实例+配置+源码理解其原理。
四、任务调度框架Quartz改造:将所有模块的JOB任务集中管理,以服务调用形式触发。
五、分布式缓存框架Redis:了解其原理并规范使用,各个模块定义系统码,共享缓存内存资源,但是已系统码隔离。
六、前后端分离:对性能以及用户体验较高的web模块进行前后端分离,前端模块全部为静态资源,部署待静态资源服务器,与controller拆分开。
七、session共享:之前也提到根据功能划分模块,多个web模块对外提供请求相应,那么就会涉及session共享,一次登录即可。主要采用tomcat-redis技术实现session共享。
八、OAuth2.0认证和授权:这是扩展外部合作渠道的毕竟之路,如授权给外部商户获取你的用户信息。如微信公众号就是这种做法,很多可以使用微信登录以及QQ登录也是这种做法。
九、封装常用的业务工具类:如批量导入导出,ftp上传及下载文件、json处理等等。
十、将框架集成部分抽出形成一个基础框架:这个非常有意义,可以简化配置,对框架升级等等。
阶段三:适配大数据、高并发以及自动化要求(可能更偏向运维)
一、日志监控,自动告警:将ERROR日志通过邮件或短信方式发给对应的开发人员,可以起到很好的提醒作用。
二、自动化部署以及持续集成:模块多了,上线部署变得更加频繁的时候,就需要简化部署流程。
三、代理与负载均衡&集群:根据阶段二,一般web项目通过ip进行负载分流,后台可以使用Dubbo的负载均衡。
四、资源服务器搭建
五、数据读写分离
六、分库分表
七、秒杀设计
八、非关系型数据库使用
九、大数据工具的使用
我有一个微信公众号,经常会分享一些Java技术相关的干货;如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。
Java项目框架搭建系列(Java学习路线)的更多相关文章
- 记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)
伴随着项目框架的落成后,本以为启动就能成功的,but.... 项目启动开始报错误1:java.lang.ClassNotFoundException: org.springframework.web. ...
- 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.AQS框架简介 AQS诞生于Jdk1.5,在当时低效且功能单一的synchroni ...
- mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装
一.mac OS X下Java项目环境搭建 因为某些原因新入手了台最新版的MacBook Pro,意味着今天要花一天时间安装各种软件以及项目环境搭建╮(╯▽╰)╭ 项目环境搭建步骤: 1.安装jdk ...
- 深入理解Java并发框架AQS系列(一):线程
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.概述 1.1.前言 重剑无锋,大巧不工 读j.u.c包下的源码,永远无法绕开的经典 ...
- 深入理解Java并发框架AQS系列(四):共享锁(Shared Lock)
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock) 深入 ...
- 权限管理系统之项目框架搭建并集成日志、mybatis和分页
前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...
- .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证
.Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...
- ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)
Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
随机推荐
- BZOJ3884题解上帝与集合的正确用法--扩展欧拉定理
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3884 分析 扩展欧拉定理裸题 欧拉定理及证明: 如果\((a,m)=1\),则\(a^{ ...
- javascript中的所有内容都是一个对象:字符串、值、数组、函数…
javascript中的所有内容都是一个对象:字符串.值.数组.函数…此外,javascript允许自定义对象.javascript对象JavaScript提供多个内置对象,如字符串.日期.数组等.对 ...
- Springboot 测试类没有找到bean注入
其他乱七八糟配置就不扯了,先上项目结构图 配置好参数后我再src/test/java类测试访问数据库时发现bean没有正确的注入.值得注意的是,这个项目的启动类是叫App.java 所以我们必须在这个 ...
- 5、Sersync实时同步实战
1.实时同步概述 1.什么是实时同步, 只要当前目录发生变化则会触发一个事件,事件触发后将变化的目录同步至远程服务器. 2.为什么要实时同步, 保证数据的连续性, 减少人力维护成本, 解决nfs单点故 ...
- visio连接线随形状移动自动伸缩
粘附可保持形状和连接线彼此依附.粘附打开时,可在移动形状时保持连接线跟着一起移动.粘附关闭时,移动形状时连接线将不会跟着移动. 1.在“视图”选项卡上的“视觉帮助”组中,单击对话框启动器 . 2. ...
- 4.5. scrapy两大爬虫类_Spider
一:Spider Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取 的 ...
- windows 环境下基于Python 的GDAL 安装
最近由于需要利用pytho处理地理空间数据,但是python本身并没有访问和处理地理空间数据的包,只能借助于GDAL(Geospatial Data Abstraction Library)来进行访问 ...
- Spring基础01——在IDEA中编写spring.xml
如果需要在IDEA自动创建spring.xml配置文件,那么我们就需要先引入Spring相关的依赖 <dependency> <groupId>org.springframew ...
- shutdown immediate 持久无法关闭数据库之解决方案
问题引出:测试环境,进行oralce的shutdown immediate,等待时间很长,长的无法等待 ORACLE shutdown 过程: 1.shutdown normal(正常关闭方式):阻止 ...
- Tunnel Warfare HDU - 1540 (线段树处理连续区间问题)
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...