关于捕鱼项目细节
1. 该项目是使用spring cloud微服务,springboot启动项目 ,springmvc,jpa进行数据库管理数据表,eureka作为项目服务注册和发现也就是集群作用,
zipkin + sleuth
追踪服务实现 rest服务调用链路
sleuth 提供追踪解决方案 zipkin 在服务调用请求和响应中加入id 表明上游与下游之间的关系
2.. NettyWebSocketChannelInitializer.java
@Value("${reader.idle.time}") 从conf_server 读取配置文件
FeignClientConfiguration.java 超时时间设置
request.Options (请求连接时间,请求读取时间)
3.jackson jar包 数据处理工具集
lombok插件
swagger jar包 接口说明
AMQP RABBITMQ 消息中间件 消息服务器
Feign http客户端 与总控有关
eg: @FeignClient(name="ea") 客户端的名称
通知Feign在调用该接口方法是要向查询名为 ea 的服务 从而得到服务url
zipkin + sleuth
追踪服务实现 rest服务调用链路
sleuth 提供追踪解决方案 zipkin 在服务调用请求和响应中加入id 表明上游与下游之间的关系
sockjs.min.js+stomp.min.js websocket 实现实时通信 消息推送
4.注解
RestController 是 ResponseBody与Controller的结合
Controller 标志的是spring mvc controller处理器
在@controller注解中,返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,与html页面配合使用的,
在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)
的数据将填充user视图中的相关属性,然后展示到浏览器,这个过程也可以称为渲染
在@restcontroller中,返回的应该是一个对象,即return一个user对象,
时,在没有页面的情况下,也能看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。
Transactional 注解 事务管理
IOC AOP DI 简称
component 相当于bean标签
@Qualifier("office") 中的 office 是 Bean 的名称,所以 @Autowired 和@Qualifier 结合使用时,
自动注入的策略就从 byType 转变成 byName 了。@Autowired 可以对成员变量、方法以及构造函数进行注释,
而@Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,
所以 Spring 不将 @Autowired 和@Qualifier 统一成一个注释类。下面是对成员变量和构造函数入参进行注释的代码:
Qualifier 只能和 @Autowired 结合使用,是对 @Autowired 有益的补充。一般来讲,
@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
作用目标是 用于对方法注解,
并且保留在运行时的环境中,我们可以利用反射 获得一个方法上的注解 调用定义的方法,
其中对注解进行配置的是元注解,本文也将着重介绍这两个最常使用的元注解。
@Retention、@Target
@RestControllerAdvice
如果全部异常处理返回json,那么可以使用 @RestControllerAdvice 代替
@ControllerAdvice ,这样在方法上就可以不需要添加 @ResponseBody。
@Id 标注用于声明一个实体类的属性映射为数据库的主键列
@GeneratedValue(strategy = GenerationType.IDENTITY) 主键自增长 同一张表中自增列最多只能有一列。
5. WebMvcConfigurer 允许跨域访问配置
CORSConfiguration.java
Swagger2Config
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select() // 选择那些路径和api会生成document
.apis(RequestHandlerSelectors.any()) // 对所有api进行监控
.paths(PathSelectors.any()) // 对所有路径进行监控
.build();
} @Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select() // 选择那些路径和api会生成document
.apis(RequestHandlerSelectors.any()) // 对所有api进行监控
.paths(PathSelectors.any()) // 对所有路径进行监控
.build();
}
DecryptRequestBodyAdvice.java json请求数据解密
EncryptResponseBodyAdvice.java json请求数据加密
RedisConfig.java
redistemplate 字符串类型 StringRedisTemplate
FeignClientConfiguration