配置
本节描述如何通过以下方式配置 Spring Data JPA:
-
“基于注释的配置”(Java 配置)
-
“Spring命名空间”(XML配置)
基于注释的配置
Spring Data JPA 仓库支持可以通过 JavaConfig 以及自定义 XML 命名空间激活,如下示例所示:
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.acme.domain");
factory.setDataSource(dataSource());
return factory;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}
}
你必须创造LocalContainerEntityManagerFactoryBean且EntityManagerFactory直接,因为前者除了创建外,还参与异常翻译机制EntityManagerFactory. |
前述配置类通过使用EmbeddedDatabaseBuilder的API春季-JDBC.Spring Data随后设置EntityManagerFactory并使用 Hibernate 作为样本持久化提供者。这里声明的最后一个基础设施组件是JpaTransactionManager.最后,示例通过使用@EnableJpaRepositories注释,本质上携带与XML命名空间相同的属性。如果没有配置基础包,则使用配置类所在的包。
春季命名空间
Spring Data 的 JPA 模块包含自定义命名空间,允许定义仓库 beans。它还包含了 JPA 特有的某些特征和元素属性。通常,JPA仓库可以通过以下方式建立存储 库如下例所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<jpa:repositories base-package="com.acme.repositories" />
</beans>
| JavaConfig 和 XML 哪个更好?Spring 很久以前就是用 XML 配置的。在当今 Java 快速发展、记录类型、注释等的时代,新项目通常会尽可能多地使用纯 Java。虽然目前没有立即移除 XML 支持的计划,但一些最新功能可能无法通过 XML 实现。 |
使用存储 库元素 它激活了所有注释为 的豆子的持久异常翻译@Repository,让JPA持久化提供者抛出的异常被转换为Spring的DataAccessException等级制度。
自定义命名空间属性
除了默认属性之外存储 库element,JPA 命名空间提供了额外的属性,让你能够更详细地控制仓库的设置:
|
明确接线 |
|
明确接线 |
Spring Data JPA 要求PlatformTransactionManager豆子命名transactionManager如果没有明确的,则必须存在事务管理-参考定义了。 |
引导模式
默认情况下,Spring Data JPA 仓库是默认的 Spring Beans。它们是单例范围的,并且已经被积极初始化。启动时,它们已经与 JPA 进行了交互实体管理器用于验证和元数据分析目的。Spring Framework 支持 JPA 的初始化EntityManagerFactory因为在 Spring 应用中,这个过程通常会占用大量启动时间。为了有效利用后台初始化,我们需要确保 JPA 仓库的初始化尽可能晚。
从 Spring Data JPA 2.1 起,你现在可以配置自助模式(无论是通过@EnableJpaRepositories注释或XML命名空间)取以下值:
-
默认值(默认)——除非明确注释为@Lazy. lazification 只有在没有客户端 bean 需要仓库实例时才生效,因为那需要初始化仓库 bean。 -
懒惰—— 隐式声明所有仓库 Beans 为懒惰,并促使创建懒惰初始化代理注入客户端 Beans。这意味着,如果客户端 Bean 仅将实例存储在字段中,且在初始化时未使用仓库,仓库将不会被实例化。仓库实例将在首次与仓库交互时被初始化和验证。 -
递 延— 基本的作模式与懒惰但会触发仓库初始化,响应ContextRefreshedEvent这样在申请完全开始之前,仓库就能得到验证。