Skip to main content

3 posts tagged with "spring-data-jpa"

View All Tags

通过关闭OpenEntityManagerInViewInterceptor确保当下游服务响应缓慢时不会导致数据库连接被占用完

· 3 min read
orange
programmer on jvm platform

OpenEntityManagerInViewInterceptorspring中的一个拦截器,它的作用是在整个请求上下文复用同一个EntityManager ,从而避免在一个请求中多次创建一个EntityManager, 从而提高性能.
但是如果在一个请求的处理代码中请求了下游服务,而下游服务响应缓慢,那么在下游服务响应之前,EntityManager 会一直被占用,直到整个请求处理完成,这样会导致当服务并发请求量较大时,数据库连接被占用完.
为了避免这种情况,可以通过关闭OpenEntityManagerInViewInterceptor来确保当下游服务响应缓慢时不会导致数据库连接被占用完. 下面将介绍如何关闭OpenEntityManagerInViewInterceptor.

在kotlin项目中kotlin-jpa插件导致导致null检查失效

· One min read
orange
programmer on jvm platform

kotlin-jpa插件会为data class生成无参构造器,导致非空字段跳过了Null检查

@Entity
class ProjectInfo(
var name: String,
var code: String,
var ownerName: String,
var applicantName: String,
var companyCode: String,
var companyName: String,
var projectType: ProjectType,
var submitDate: LocalDateTime = LocalDateTime.now(),
var planStartDate: LocalDate?,
var planEndDate: LocalDate?,
var endDate: String,
var targetCustomers: Array<String>?,
var formStatus: ApplicationStatus = ApplicationStatus.DRAFT,
var projectStatus: ApplicationProjectStatus = ApplicationProjectStatus.DRAFT,
var comments: String?
) {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = -1
}