这是我参与11月更文挑战的第 12 天,活动详情查看:2021最后一次更文挑战
最近查了一个 spring data jpa 的问题,其实也不能算是框架层面的问题,准确说是配置;因为之前没有怎么使用过 spring data jpa(更多是 mybatis 或者自研 orm 组件),所以期望通过本篇来记录下 spring data jpa 的配置。
本篇从配置源码开始,先直观的了解 spring data jpa 自己有哪些配置,然后会结合具体的 case 来描述各个配置的作用;同时也对类似 spring.datasource.*
的配置也做简单介绍,不要再傻傻分不清了。
分为 一、二 和 综合实践三部分,本篇为第一部分 jdbc 配置相关
jdbc 配置和 jpa 配置
在没有使用之前,一直会认为 datasource 的配置,如:url, class-drive-name 等也是在 spring data jpa 下,看起来还不是。换个角度想了下,url, class-drive-name 这些属于 jdbc 的配置,并非是 orm 的配置,所以也就理所应当了。下面分别看看 JpaProperties
和 HibernateProperties
以及 jdbc 的配置。
jdbc 配置
在 spring 的 jdbc 代码模块中,jdbc 的配置包括两个:
JdbcProperties
: prefix 为spring.jdbc.*
DataSourceProperties
: prefix 为spring.datasource.*
JdbcProperties
下面是 JdbcProperties,对于这几个配置,着实看起来有点陌生
1 | java复制代码@ConfigurationProperties(prefix = "spring.jdbc") |
JdbcProperties 配置通过代码分析来看,目前只有在 JdbcTemplate 中使用了;也就是说,如果你的项目中没有使用 JdbcTemplate 的话,那 spring.jdbc.template.*
是无用的。抛个问题:如果使用 JdbcTemplate, 并且将 queryTimeout 配置成 -1 是不是一定会超时?为 0 呢?答案肯定是 否;
jdbc 的这几个参数从代码看,最终都是为底层 Statement 服务的,这里不具体介绍执行过程及原理;这里放一个之前看到的一篇查询超时问题的排查,以供各位理解:关于jdbc的setQueryTimeout() 的bug和Query execution was interrupted 的调查
- fetchSize: 从数据库和结果集查询时,每次拉取指定 fetchSize 大小的数据,循环去取,直到取完。
- maxRows:底层
Statement
对象生成的所有ResultSet
对象可以包含的最大行数限制,最大以后的数据会被丢掉;这个参数设置应该是为了避免在结果集非常大的时候导致内存扛不住。
DataSourceProperties
这个比较容易理解,就是数据源配置,常见的 url, driverClassName 都是在这里配置的。
1 | java复制代码@ConfigurationProperties(prefix = "spring.datasource") |
一般项目中,常见的配置大概如下,应该是对于任何 spring 配置数据源来说,这个都是必不可少的:
1 | properties复制代码spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver |
配置初始化的 DDL 和 DML
1 | properties复制代码spring.datasource.schema=schema.sql |
如果配置中指定了 platform
1 | properties复制代码spring.datasource.platform=test |
那么需要将 配置初始化的 DDL 和 DML 修改为
1 | properties复制代码spring.datasource.schema=schema-test.sql |
否则会出现找不到 resource 的报错,如下:
1 | bash复制代码Invalid value 'schema.sql' for configuration property 'spring.datasource.schema' (originating from 'class path resource [application.properties] - 7:26'). Validation failed for the following reason: |
小结
本篇主要介绍 Spring Data JPA 配置部分关于 jdbc 的配置,如有问题欢迎指正。
本文转载自: 掘金