今日收获
1.早晨在公交学习了mvcc(待深入学习)
mvcc主要解决的cm和cc的版本问题。实现过程是在每行数据中都存在一行隐藏的数据,分别为事务id,主键,以及指向上一条版本的指针。对于cm来说,其快照读视图会在每次查询时都查询事务id为最新的数据。因此可能产生幻读。
2.一种新的处理Kafka消息的方式
因为kafka一直自称自己为流式平台,今天在写代码时特意使用了一下。使用KStream来处理数据。感觉还不错更像是我们正常的思维。
今日踩坑:
clickhouse + spring data jdbc报方言无法找到错误
报错原因:
spring data jdbc中存在自动配置的jpa相关内容,在使用时,他会使用DialectResolver这个类扫描方言。但是clickhouse的getDatabaseProductName方法返回数据为Clickhouse。spring data jdbc中默认的方言并不存在clickhouse。因此导致方言查找异常。
解决方法:
1.如果仅仅是使用NamedParameterJdbcTemplate的查询功能,则可以直接将JdbcRepositoriesAutoConfiguration.class排除。
2.如果需要使用jpa相关功能,可以选择自己配置datasource或者自定义方言。
自定义方言流程:
通过阅读源码可知SpringBoot的方言解析器(DialectResolver)是通过
private static final List<JdbcDialectProvider> DETECTORS = SpringFactoriesLoader
.loadFactories(JdbcDialectProvider.class, DialectResolver.class.getClassLoader());
来获得的。因此我们可以通过实现 DialectResolver.JdbcDialectProvider该接口,自定义方言。loadFactories其工作原理是通过扫描资源目录下META-INF/spring.factories实现的,因此我们需要添加配置
org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=com.cheche365.dictonary.datatrans.datatrans.config.ClickHouseDialectProvider