Spring tips
Contents
Feign From 的使用
建立一个feign
的配置文件,并在其中写入如下代码:
1 |
|
然后在请求到接口上加入consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE]
,
对于请求到参数,使用model
进行封装,然后使用map
封装请求参数
feign 在 spring boot 2.0 中提示错误
当使用 Spring boot 2.0
的时候,idea 会提示无法注入,这个时候在client
中加入@Component
注解就可以了
自动注入冲突
在使用Spring boot 2.0
的时候,有可能会出现多个自动配置到Bean
冲突到情况,这个
时候可以将不需要注入到Bean
加入到spring.autoconfigure.exclude
中就可以了,例如consul
和kubernetes
冲突到情况,可以用如下设置:
1 | spring: |
lombok 在 IDE 提示报错到情况
当出现lombok报错的时候,在 peferences -> build -> annotation processors 中设置
feign 的 name 同名提示报错
当在Spring boot 2.0
使用feign
的时候,使用Bean
提示如下错误:
1 | Description: |
此时,可以考虑如下两个解决办法:
- 在配置文件中加入运行使用同名
Bean
的配置
1 | spring: |
- 将每个
Bean
配置成不同的名称
Java 和 Kotlin 类型不兼容
在使用spring data redis允许lua脚本的时候会出现返回值是Int,然后在kotlin中出现了
类型不兼容的情况,这是因为kotlin中的Long指向的是Java中的long,并且在接口上做了不
可以为空判定,大部分情况下是可以兼容的,但是spring框架类中使用了反射强制获取了Java中
的Long类型,也就是在获取包装类型的情况下,只能强制指定返回的类型为包装类习惯,这
是因为在不指定的话默认的类型转换是不可空的,如下
1 | java.lang.Long |
简单的分布式锁的实现
实现分布式锁最简单的方式就是在reids中执行lua脚本,因为lua是单进程执行的,在不是
集群部署的情况下实现一个分布式锁或者进行分布式限流相对来说是比较简单的。当在系统
部署的时候使用了集群的方式,应该考虑的是数据在每个slot中同步的问题,一个简单的解
决办法是在少数节点只进行写入操作,在多数节点进行写操作。
在spring中,使用spring data redis对大部分的redis操作进行了封装,并且可以在使用集
群的情况下设置写入节点和读取节点,然后在其中对数据进行处理,所有的后续操作都要等
到redis中的数据真实有效变更后才能进行后续操作
Git 重置所有提交记录
基本思想是新建一个分支,然后把本地的master分支删了,然后重命名当前分支,具体操作如
下:
1 | 新建分支 |
Author: moyu-x
Link: http://moyu-x.com/2019/02/23/201902/spring-tips/
License: 知识共享署名-非商业性使用 4.0 国际许可协议