关于一次MybatisPlus自动配置失效

今天在项目中配置了动态数据源,但是在引入了MybatisPlus后启动项目,却发现所有Mapper和SqlSession等等Bean没有被自动注入到容器中,猜测是自动配置失效,查看源码后发现MybatisPlusAutoConfiguration自动配置类上有注解@ConditionalOnSingleCandidate(DataSource.class),即在容器中只有一个DataSource候选Bean是才会启用自动配置,而我手动在容器中注入了一个主数据源和一个动态数据源,导致自动配置失效。并且由于将主数据源设为了动态数据源的默认数据源,所以最好的解决方案是在动态数据源上添加@Primary注解,让容器优先选择动态数据源

spring mvc统一API返回格式

对于前后端分离的项目,采用统一的返回格式可以有效减少前后端开发人员的交流成本,对于Spring MVC可以利用切面无侵入地、优雅地实现这一点。

Spring MVC提供了AbstractMappingJacksonResponseBodyAdvice抽象类对返回的JSON做二次处理

首先定义返回结构

阅读更多

解决Kotlin下使用@Transactional等Spring代理类空指针异常

直接上代码

1
2
3
4
5
6
7
8
9
10
11
open class BaseController<T : BaseEntity>(val baseService: BaseService<T>) {

@Transactional
@AuthRequired
@PatchMapping("/{id}")
open fun updateById(@PathVariable("id") id: Long, @RequestBody entity: T): ResponseEntity<T> {
entity.id = id
return ResponseEntity.ok(baseService.updateById(entity))
}

}

访问controller时出现NullPointerException,此时baseService为null

阅读更多

解决Kotlin项目spring-boot-configuration-processor不生效

在尝试用kotlin写springboot项目时发现springboot的kotlin项目模板的注解处理器没生效,结果就是自定义的配置类在idea中没有语法提示,且有一堆黄线警告,解决方法就是用kapt进行注解处理
在build.gradle.kts加入

1
2
3
4
5
6
7
8
9
plugins {
...
kotlin("kapt") version "1.4.20"
}

dependencies {
...
kapt("org.springframework.boot:spring-boot-configuration-processor")
}

重新构建,这样就能正确生成spring-configuration-metadata.json

阅读更多