Java微服务开发基础
一、准备工作
学习资料
书籍
《Java 微服务》 辛大奇 著 中国水利水电出版社
开发工具
IntelliJ IDEA
基础知识
Java教程 https://www.liaoxuefeng.com/wiki/1252599548343744
SQL 教程 https://www.runoob.com/sql/sql-tutorial.html
Spring基础知识汇总 Java开发必看,推荐
Spring框架教程(非常详细) http://c.biancheng.net/spring/
MyBatis-Plus https://baomidou.com/pages/24112f/ DDL(数据定义语言) 数据库和表的创建和修改,结合MyBatis-plus基本可以完成很多的数据库操作
程序员手册大全 http://manual.51yip.com/
C++标准教程、PostgreSQL必备参考手册、深入理解Nginx、高性能MySQL等
交流社区
其他
Git分支命名规范 https://blog.csdn.net/qq_25123887/article/details/125680610
技术栈
Knife4j
knife4j-swagger接入 @ApiOperationSupport
需要过滤掉的参数
MapStruct
mapstruct原理解析 https://blog.csdn.net/datastructure18/article/details/120208842
Mapstruct 使用教程 https://blog.csdn.net/qq_44732146/article/details/119968376
消息中间件
四种常用消息中间件比较分析(RabbitMQ、ActiveMQ、Kafka、RocketMQ) https://blog.csdn.net/qq_42459181/article/details/88061028
常用消息中间件MQ(ActiveMQ、RabbitMQ、RocketMQ、Kafka)优缺点以及区别
https://blog.csdn.net/wsx1014/article/details/118308202
Spring Cache
Spring之Cache缓存详解 https://blog.csdn.net/qq1309664161/article/details/120381708
Spring Cache的简介和简单使用 https://blog.csdn.net/weixin_70606639/article/details/125868733
Mybatis-plus
Springboot + Mybatis-plus事务管理 有Gitee源码
mybatis-plus事务 简单示例
MyBatis Plus配合p6spy控制台打印美化格式的sql语句
Mybatis-plus 联表查询
Mapper.xml 介绍 Mapper.xml 常用配置、单表查询(paramterType、resultType)、多表关联查询(一对多、多对多)
MyBatis中CDATA的作用 在XML文档的解析过程中,首先查找元素的起始符,即字符"<"和字符"&"。字符"<"表示为新元素的开始,字符"&"表示为字符实体的开始。CDATA的作用是保护这些特殊字符(例如,小于号<等)不被解析。
Mapper.xml 路径配置 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常
动态数据源和多模块Mapper.xml 配置 SpringBoot Maven多模块项目 mapper.xml 文件扫描不到问题
在配置文件里面也指定了mybatis-plus的xml位置:
mybatis-plus: # mapper xml映射路径 mapper-locations: classpath*:mapper/**/*Mapper.xml
在SqlSessionFactory的Bean中配置Mapper路径
/** * 使用MyBatis Plus的sqlSessionFactory代替, * 此处注意mybatis与mybatisPlus的配置不同,不然扫描不到对数据操作的方法。会报未绑定错误 * @return sqlSessionFactory * @throws Exception */ @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(myRoutingDataSource); // sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*.xml")); org.springframework.core.io.Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*.xml"); sqlSessionFactoryBean.setMapperLocations(resources); MybatisConfiguration mybatisConfiguration = new MybatisConfiguration(); sqlSessionFactoryBean.setConfiguration(mybatisConfiguration); return sqlSessionFactoryBean.getObject(); }
注解
@SneakyThrows注解 https://blog.csdn.net/qq_22162093/article/details/115486647
feign
feign和openFeign区别和openFeign教程 https://blog.csdn.net/weixin_45433031/article/details/122994267
feign和openfeign的区别 https://blog.csdn.net/justlpf/article/details/125874767 包含demo源码
【feign】OpenFeign设置header的5种方式 添加注解
feign常用俩种降级方式Fallback和FallbackFactory。 https://blog.csdn.net/weixin_42771651/article/details/121626431
不同微服务之间Feign调用方法(Pigx框架下) 有跨租户处理
【springcloud】解决使用feign调用服务 header参数传递的问题
Feign实现服务间并且调用时传递header以及新增header
MQTT
https://blog.csdn.net/qq_40083897/article/details/106408822 包含EMQ服务和简单代码
SpringBoot 整合MQTT客户端连接多个服务端(多个emqx)
https://blog.csdn.net/qq_40083897/article/details/117333716 是否可以支持多个模块使用以便注册多个客户端
springboot自动化配置mqtt,整合spring-integration-mqtt,连接多个mqtt,动态订阅主题
https://blog.csdn.net/qq_20280007/article/details/105250986?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105250986-blog-117333716.pc_relevant_multi_platform_whitelistv6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105250986-blog-117333716.pc_relevant_multi_platform_whitelistv6&utm_relevant_index=2
Spring Cloud Gateway
注意:springcloudgateway的内部是通过netty+webflux实现的,webflux实现和springmvc配置依赖冲突。
跨域配置
spring: cloud: gateway: discovery: locator: lower-case-service-id: true #启动 locator.enabled=true 自动路由时,路由的路径默认会使用大写ID,若想要使用小写ID,可将lowerCaseServiceId设置为true enabled: true #默认为false,设置为true开启服务发现和路由的功能,网关自动根据注册中心的服务名为每个服务创建一个router,将以服务名开头的请求路径转发到对应的服务 filters[0]: PreserveHostHeader globalcors: cors-configurations: '[/**]': allowedHeaders: "*" # 允许在请求中携带的头信息 allowedOrigins: "*" # 允许哪些网站的跨域请求 allowCredentials: true # 是否允许携带cookie allowedMethods: "*" # 允许的跨域ajax的请求方式 default-filters: - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE # 删除响应头重复数据
常见问题
已解决:
windows中java -jar 在jar包中引用nacos配置中心的问题
https://blog.csdn.net/lxw198902165221/article/details/119911999
Nacos+docker部署服务时,本地注册到nacos上的服务无法使用OpenFeign调用docker上的服务
discovery中需增加IP配置,参考链接 解决服务器 Docker + Nacos + FeignClient 调用不通 https://blog.csdn.net/sxg0205/article/details/113420024
java -jar -Xms128m -Xmx750m -Xmn150m -Xss1024k ***.jar
待学习
Nacos+Sentinel+OpenFeign实现熔断、限流、服务间调用 https://zhuanlan.zhihu.com/p/521705933
springcloud gateway中进行统一处理api接口异常返回 将异常也进行处理,使其数据格式与我们接口中保持一致,方便前端进行统一处理。