java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...
一图胜千言
一图胜千言
既然已经在session有了,直接session取就行了,为什么要再放threadlocal,之后再从threadlocal清掉,一直从session拿不就行了?
答:
放在Threadlocal里面,是为了后面的Controller、Service、Dao任何地方只要是当前业务处理的线程都能 直接并且方便的 获取到用户对象. 如果我们不做这种处理,那只能从Session中获取,当Service里面要获取user的时候,Controller在调用service方法时就必须传递HttpServletRequest这种容器相关参数,增加了业务与底层实现的耦合,造成业务处理关注点的增多;而且每个Controller都需要接收HttpServletRequest参数,因为不能预估未来是否要获取user对象来逻辑处理。
2 nginx的配置中root和alias的区别?
答:
root和alias的区别是酱紫的:
配置root需要访问路径要叠加目录路径,比如配置了
location /images {
root /path/to/img;
}
那么有张图/path/to/img/a.jpg,那么浏览器中访问到这张图片就需要http://localhost:8081/images/path/to/img/a.jpg
而alias就简单多了,url中不需要关心本地目录路径
location /images {
alias /path/to/img;
}
http://localhost:8081/images/a.jpg 这样就能访问,所以建议使用alias,尤其是windows下 ;
如果非要使用root配置的话,那只能使用相对路径了,相对nginx的安装路径,比如
你将nginx安装在D:\nginx下
你可以将图片放在D:\nginx\img,比如你想访问D:\nginx\img\1.jpg,配置好:
location /images {
root img;
}
就可以通过http://localhost/images/1.jpg就可以了,
否则可以使用alias,就可以使用windows绝对路径了
3.freemarker的那些文件哪里可以下载?静态文件在哪里
答:
freemarker文件在单体工程house-web/src/main/resources/templates目录下,是以.ftl结尾的文件
图片文件在单体工程house-web/src/main/resources/static目录下
4.datasource 加载失败,空指针异常
答:
确保mysql驱动及Mybatis-Starter已经依赖,house-web已经依赖上了house-biz,并且配置文件中包含有spring.druid的配置
5.发现我的spring-boot 的配置文件不支持 的druid的 spring.druid.xx的属性格式,只能用spring.datasource.xx的格式,这是为什么?
答:
ConfigurationProperties注解有两种使用方式,一种是注解在Properties类上,作用是将application.properties(yaml)上的配置绑定到该类属性上,另外一种是注解在Bean方法上,作用是将作用是将application.properties(yaml)上的配置绑定到该bean方法返回对象上。前者通过注解处理器是可以生成/META-INF/metadata.json文件,用于IDE代码提示的,后者就无法生成也就IDE不能进行提示,再者,在Bean方法上注解@ConditionalOnProperty的property,IDE也无法提供提示。
你也考虑使用druid-spring-starter来替换DruidConfig,事先要删除DruidConfig。课程中使用DruidConfig是更加轻量可控的方式。
6.提示userService找不到
.答:
请检查service注解及package是否属于启动类所在package的子package。所有bean找不到,mapper找不到的错误,要先确保启动类
所在package是root package,SpringBoot默认会扫描root package下面的子package来发现Spring bean,这个尤其要注意
7 . Cannot expose session attribute 'user' because of an existing model object of the same name
答:
注释掉同名user的attribute设置
8.Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService'
答:
首先看底层的mapper bean,datasource bean创建是否正常,数据库有没有连接上,然后再检查下application.properties的mybatis配置是否正确
9.用户模块一般作为独立的服务数据库,比如其它业务模块(订单模块) 我的每笔订单都是跟人绑定的。这里是需要用表join的。类似于这样的业务数据应该有很多,这样的表结构如何划分微服务。
答:
微服务改造时要以限定上下文进行拆分,假设订单和用户分属两个不同的限定上下文。根据实际经验,用户通常作为一个最基础的服务,用户涉及的关联关系很多,为防止用户服务变的过于庞大,关联关系往往分拆到其它领域模型中进行维护,比如订单用户关系会放在订单服务中维护。
微服务拆分后,对于订单查询的场景,可以从订单用户关系表中的userid来查询出订单id列表,然后通过订单id列表查询订单表。对于多维度条件、分页、范围查询的场景可以将用户和订单表合并成一个宽表输出到ES中,来解决跨库join的问题
10.分布式事务和消息队列的内容有涉及到吗
答:
会有涉及,因课程篇幅所限,会从理论上讲解,缺少代码实现部分,还请见谅
11.多库的数据统计问题,在实际应用中,拆为多库时,联表查询统计怎么处理?
答:
如果是应用中有复杂条件查询的逻辑,应该将多张数据表合并成宽表同步到ES中,进行查询.
数据统计应该和应用开发分离,由专门的团队负责,一般是将数据表定期或实时同步到hive表,通过hive sql进行离线统计。
12.在mapper接口上添加注解+SQL(比如select("select * from ..."))的方式,和课程中接口定义在类中,SQL语句定义在XML文件中这种方式,两者之间除了实现方式不同外还有其它区别吗?
答:
注解方式无法利用mybatis动态sql的功能,当sql变多变复杂将成为噩梦;对于数据库操作要求较高的项目如果进行sql审核将变得不方便;sql与代码放在一起,也难以维护
13.服务的消费者需要注册到注册中心吗,还是只需要服务的提供者注册到注册中心就行?
答:
对于SpringCloud Eureka只需要服务提供者注册,但同时要注意很多服务是 兼具这两种角色的--既是服务消费者又是服务提供者
14.为啥我实例在Eureka DashBoard不显示IPxxxx,而是显示机器名?
答:
添加一个配置eureka.instance.prefer-ip-address = true,如果还是机器名说明你本地只有一个回环地址127.0.0.1,那么
还需要加上eureka.instance.instance-id=${你的ip}:${你的port}才行
15.SpringCloud版本与Springboot的版本对应的问题
答:
虽然SpringCloud版本与SpringBoot没有强制对应关系,但是还是建议在选用SpringCloud版本时要同时选择与其兼容的SpringBoot版本。通过http://projects.spring.io/spring-cloud/#quick-start输入不同SpringCloud版本返回对应的SpringBoot版本
16.recomHouse变量没有值,Freemarker报错的问题,FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> recomHouses [in template "homepage/index.ftl" at line 107, column 27]
答:
recomHouses没有值,是不是还有学到推荐那一节,建议先注释掉,等学到热门推荐再解开
17.mybatis.config-location=classpath:/mybatis/mybatis-config.xml,这个是写在web下的,但config.xml是在biz下的,最后是怎么找到的
答:
最后打成一个jar包,jar包里面又包含biz的jar,所以能找到
18.能否简单介绍下服务拆分,对于一个像旧系统 用户表\组织表菜单\这些基础的真不知道如何下手呀
答:
服务拆分涉及很多,基本的拆分原则,组织架构,项目特点,业务场景,历史经验都有关系;
从业务功能之上来看服务拆分,而不是数据表 , 将每个 “联系紧密的业务 " 划定成一个限定上下文;
然后再分析限定上下文包含哪些业务模型,上下文 之间 可以分析出哪些共享模型
19.技术书都有哪些推荐
答:
《Java TCP/IP Socket编程》 网络编程快速入门,讲的通俗易懂
《Java并发编程实战》 并发编程经典书,必读
《Effactive Java 2.0》 Java编程的最佳实践,依然值得细读
《java并发编程的艺术》 引导你深入JDK并发包源码,建议边研究源码边参考本书
《从Paxos到Zookeeper分布式一致性原理与实践》 借助zookeeper组件的深入剖析,让你可以了解分布式系统领域的设计原理
《精通Spring 4.X:企业应用开发实战精通》 如果非要推荐一本Spring的书,我觉得陈雄华写的这本还是不错的,我看过Spring3.x企业应用开发实战,可以当做字典书
《Mysql技术内幕》 系列的书,可以让你了解Mysql的原理
《大型网站技术架构-核心原理与案例分析》及 《大型网站系统与Java中间件实践》 可以让你了解互联网系统架构的演进过程
《深入理解Java虚拟机》
20.feign的作用还有哪些常用的呢
答:它也是基于http,让你从复杂的http请求构建过程中解脱出来
21.Spring Cloud Config怎么样
答:
SpringCloud Config 它相比一些开源的分布式配置中心(Disconf, Dismond)还有一些差距,比如它不支持变更通知
22.我们应该对spring boot 的线程池进行设置吧。。还是默认的配置就能万金油了?
答:
并发量大,业务处理耗时较久的业务场景下要将线程数开大,比如如果你使用tomcat,那么在application.properties(yaml)中
添加配置server.tomcat.max-threads=2000
23.添加注解Async执行异步没有生效
答:
Spring处理异步是通过AOP来实现的,需要调用的Service与添加@Async方法的Service分开,同时@Async注解的方法不能有返回值(或者返回Future),也不能定义为private
24.多环境配置的时,是通过pom定义多个profiles,还是定义多个application-*.yml(如:application-dev.yml)这样的文件
答:
生产环境建议使用的前者,因为不同环境,不止只有application.properties(yaml)不同,还有其它配置文件不同环境也不一样。
25.添加依赖后IDE没有生效
答:
如果使用Eclipse,使用Maven-Update Project..
如果使用Idea,选择Maven Projects -> reimport all maven projects
26.hystrix是不是都要在各个服务跟网关都需要配置实现呢
答:
要看具体业务情况,对外部业务依赖都应该配置,但API Gateway一定是配的最全的
27.这个课程为什么有没有讲到spring session
答:
像SpringSession、Spring Data Redis、Spring Kafka,我们生产环境都没有用,侵入性太强,不易定制化.
课程中更希望大家能理解解决方案的思路和原理,而不是方案的套用,否则无法达到举一反三的目的,引入spring很多技术栈也会带来不少维护成本
java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...相关推荐
- java深入微服务原理改造房产销售平台,Java深入微服务原理改造房产销售平台
端午大礼包,等你来拿 今天推送的教程是:Java深入微服务原理改造房产销售平台 Java深入微服务原理改造房产销售平台 微服务是近年来非常流行的架构,是后端资深开发工程师必备技能.本课程将基于房产销售 ...
- .metadata是什么项目文件_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?
前言 本章我们主要从以下几个方面夯实我们的基础: 微框架 Spring Boot 的基本认识 实战学习 Spring Boot 的基本使用 多种方式获取 Spring Boot 配置 如何自定义一个 ...
- 【项目实战】Java从单体到微服务打造房产销售平台(一) - 整体概述
Java从单体到微服务打造房产销售平台 可掌握技能:从0-1业务设计 + SpringCloud(微服务改造) https://coding.imooc.com/class/174.html
- JAVA计算机毕业设计房产销售平台Mybatis+系统+数据库+调试部署
JAVA计算机毕业设计房产销售平台Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计房产销售平台Mybatis+系统+数据库+调试部署 项目架构:B/S架构 开发语言:Java语言 开发软 ...
- JAVA房产销售平台计算机毕业设计Mybatis+系统+数据库+调试部署
JAVA房产销售平台计算机毕业设计Mybatis+系统+数据库+调试部署 JAVA房产销售平台计算机毕业设计Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- 基于JAVA房产销售平台计算机毕业设计源码+系统+lw文档+部署
基于JAVA房产销售平台计算机毕业设计源码+系统+lw文档+部署 基于JAVA房产销售平台计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软 ...
- java毕业设计房产销售平台Mybatis+系统+数据库+调试部署
java毕业设计房产销售平台Mybatis+系统+数据库+调试部署 java毕业设计房产销售平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...
- 2022最新基于 Spring Cloud 的微服务架构分析,java 技术经理岗位职责
构建在开发团队之外的 API 网关必须具备负载均衡能力,可以配置多个 IP 地址.通过该 API 网关也最好具备和 Docker 容器扩展后的服务自动注册和地址加入扩展能力. Eureka 的竞品分析 ...
- 前后端分离和微服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...
前言 既要低头赶路,又要抬头望天,科技是为人服务的,任何技术背后都有更深层次的考量. 之前的文章中咱们聊了很多微服务的相关内容,简而言之,微服务的本质,就是一种可以加速分工.促进合作的新协作机制.知其 ...
最新文章
- 成功解决Module Not Found Error : No module named mglearn
- Nginx在安装过程经常出现的问题
- (41)Xilinx MMCM IP核配置(二)(第9天)
- 《机器学习实战》学习总结(四)逻辑回归原理
- ubuntu下gns3 0.7安装笔记
- Python学习笔记(未完)
- Spring mvc mybatis cxf Add CGLIB to your classpath. 错误
- 程序设计语言的发展过程
- 罗技键盘连计算机,罗技键盘怎么连接电脑(罗技键盘使用教程及性能评测)
- Opencv中rectangle函数与Rect函数的用法
- web3.0、元宇宙、AIOT探讨-产品思维修炼(15)
- php小说阅读例子,Thinkphp掌上阅读功能完善强大的小说源码 - 四套模板
- Centos7 | etc 目录下文件详解
- 计算机术语翻译(Term.)及缩写整理(Abbr.)
- nodepad++之jsonviewer插件
- 服务器多个cpu的作用,服务器多核CPU是什么?多核CPU有什么用?
- sql 添加注释的方法
- Minecraft 1.12.2 生化8 模组 2.0版本 新Buff、病毒分析仪登场
- 哥大暴跌16名!2023 USNews 全美大学排名发布!
- 北斗/GPS授时原理