一、JDBC的自动配置
spring-boot-starter-data-jpa依赖于spring-boot-starter-jdbc,而SpringBoot对JDBC做了一些自动配置。源码放置在org.springframework.boot.autoconfigure.jdbc下,如图所示:
大概看一下源码,就能看到是通过“spring.datasource”为前缀的属性自动配置dataSource;
SpringBoot自动开启了注解事务的支持(@EnableTransactionManagement);还配置了一个jdbcTemplate。
SpringBoot还提供了一个初始化数据的功能:放置在类路劲下的schema.sql文件会自动用来初始化表结构;放置在类路径下的data.sql文件会自动用来填充表数据。
二、对JPA的自动配置
SpringBoot对JPA的自动配置放在org.springframework.boot.autoconfigure.orm.jpa下,Spring Boot 1.x和2.x有所差别,但大致逻辑是一样的。
1.x版本:
2.x版本:
2.x与1.x版本有以下区别:
- @Configuration注解增加了属性:proxyBeanMethods = false
- @ConditionalOnClass注解增加了一个元素:SessionImplementor.class
- 取消了注解@Conditional({HibernateEntityManagerCondition.class})
- 取消继承JpaBaseConfiguration
- 增加注解@EnableConfigurationProperties(JpaProperties.class)
- 抽离内部逻辑到HibernateJpaConfiguration,并通过@Import注解导入。
从JpaProperties源码中看出,配置JPA可以使用spring.jpa为前缀的属性在application.properties中配置。
HibernateJpaAutoConfiguration引入HibernateJpaConfiguration,
HibernateJpaConfiguration继承JPABaseConfiguration。从JpaBaseConfiguration源码中看出,SpringBoot为我们配置了transactionManager、JpaVendorAdapter、entityManagerFactory等Bean。JpaBaseConfiguration还有一个getPackagesToScan方法,可以自动扫描注解有@Entity的实体类。
三、对Spring Data JPA的自动配置
Spring Boot对Spring Data JPA的自动配置放在org.springframework.boot.autoconfigure.data.jpa下。
(1.x和2.x有区别,不再关注1.x)
从JPARepositoriesAutoConfiguration和JpaRepositoriesRegistrar源码看出,
JPARepositoriesAutoConfiguration依赖于HibernateJpaAutoConfiguration配置的,且SpringBoot自动开启了对Spring Data JPA的支持,即我们无需在配置类显示声明@EnableJpaRepositories。
四、SpringBoot下的Spring Data JPA
我们在Spring Boot下使用Spring Data JPA,在项目的Maven依赖里添加spring-boot-starter-data-jpa,然后只需定义DataSource、实体类和数据访问层,并在需要使用数据访问的地方注入数据访问层的Bean即可,无须任何额外配置。
来源:oschina
链接:https://my.oschina.net/alexjava/blog/4258256