1.微服务鉴权
参考:01.分布式系统认证方案-什么是分布式系统_哔哩哔哩_bilibili
个人理解 简单来说就是用户的jwt会在各个微服务之间传递,每个微服务都会有个拦截器,用户拦截来自外部的调用信息(内部会携带jwt),然后进行解析后存入当前线程的SecurityContextHolder
这部分还引出一个OAuth 2.0,目前理解是用来第三方登录的,也可以把自己项目作为“授权服务器”,负责颁发访问令牌给第三方应用程序
2.register-with-eureka false
- “register-with-eureka"是Netflix
Eureka的一个配置选项,用于指定服务是否应该向Eureka服务注册自己。如果将该选项设置为"false”,那么服务在启动时将不会向Eureka注册自己。 - 这种配置通常用于在开发环境或者一些特殊场景下,当我们不希望某个服务被纳入到服务治理(如Eureka)的管理范围时。在生产环境中,大部分情况下服务都会将自己注册到Eureka服务器,以便实现服务的发现和负载均衡。
- 如果将"register-with-eureka"配置选项设置为"false",服务将不会向Eureka注册自己,但仍然可以通过已注册到Eureka的其他微服务进行访问。
- 通过Eureka服务注册中心,微服务可以在启动时向Eureka注册自己,并提供有关自身的元数据(如主机名、端口号等)。其他微服务可以使用Eureka客户端来发现和访问已注册的微服务。
即使某个微服务选择不将自己注册到Eureka,它仍然可以通过Eureka客户端从Eureka服务注册中心获取其他已注册微服务的信息,并使用该信息进行访问。这样可以实现微服务之间的协作和通信。 - 因此,即使某个微服务选择不注册到Eureka,只要其他微服务已注册并运行,仍然可以拉取和访问其他微服务。
开发环境一般要配置这个,不然同事调试的时候说不定就打到自己这里了
3.e.printStackTrace
好处:
会将错误信息全部打印在控制台
坏处:
打印过多信息,占用大量的内存,可能会堵塞其他的一些请求。
代码规范之e.printStackTrace()_printstacktrace方法 代码规范推荐使用么-优快云博客
4.Collectors.groupingBy
可用于按照字段进行分组,分组出来是一个map,key为字段值,value为分组list
/**
* 使用java8 stream groupingBy操作,按城市分组list
*/
public void groupingByCity() {
Map<String, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(Employee::getCity));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
这里还有其他更多用法:
Java8 Stream 之groupingBy 分组讲解_在奋斗的大道的博客-优快云博客
5.手动获取bean(controller层注入为null)
碰到很奇怪的问题相同的service,在controller类a里面可以自动注入,在controller类b里面却自动注入失败,直接就是null。但是类b里面该加的注解也加了,我甚至直接复制类a全内容过来再改,也无法自动注入。搞得我焦头烂额,后来干脆手动获取bean,反正该controller类中方法也不多。后面有时间再研究研究到底什么问题。
工具类参考:springboot 对于@Autowired 注入为null 的介绍与解决方式_@autowired null-优快云博客
2023-11-20更新:找到原因了,居然是因为不小心把controller中某方法设置为了private!!!
Controller内注入的Service为null_controller注入service为null-优快云博客
controller的请求方法为什么不可以用private修饰_编程潜心修炼的博客-优快云博客
【精选】为什么你写的Controller里,private方法中的bean=null?-优快云博客
动态代理的private方法内service注入为什么是null_private 动态代理_云胡不喜丶的博客-优快云博客
对cglib了解不多,暂时大概了解了就是private情况下,cglib代理逻辑走到某步会为空然后报错。
经过测试,如果controller中有public、private。调用public方法的时候bean会变得有值,调用private就会变成null。所以public和private共存的情况下,public是可以正常调用而不报空的。
cglib有待学习
6.关于stream流生成新的集合与就集合的关系
简单来说就是新集合中每个元素是对老集合的浅拷贝
Java8 stream流 生成新的集合,那么新集合里面的值是否为原值呢?_stream流会改变原来的list吗-优快云博客
7.mybaitsplus的LambdaQueryWrapper使用apply进行复杂条件查询
有一个需求是在进行基础的LambdaQueryWrapper的eq,like等筛查之后。还要对abc字段进行截取前4位再进行比较,基础的lq方法无法实现,又不想手动写sql,后来了解到可以使用apply进行实现
//使用了 apply 方法来添加自定义的查询条件。LEFT(abc, 4) 函数会将 abc字段的值截取前4个字符,然后与 dto.getCategory() 进行比较。
//
//
//请注意,这里使用了占位符 {0} 来表示动态参数,确保在执行查询时会对该参数进行正确的替换。
lq.apply(StringUtils.isNotEmpty(dto.getCategory()), "(LEFT(abc, 4) = {0})", dto.getCategory());
当然apply还有其他使用方法,有待学习