龙空技术网

Spring Boot中文参考指南84.8、在 Hibernate 组件中使用依赖注入

IT荠荠菜 172

前言:

此刻朋友们对“配置hibernate需要注入的属性名称”大体比较关怀,我们都想要剖析一些“配置hibernate需要注入的属性名称”的相关知识。那么小编也在网摘上网罗了一些对于“配置hibernate需要注入的属性名称””的相关知识,希望同学们能喜欢,小伙伴们一起来了解一下吧!

上一篇[84.3、使用Spring Data 存储库]

下一篇[85、数据库初始化]

英文原文:
GitHub:

84.8、在 Hibernate 组件中使用依赖注入

默认情况下,Spring Boot 注册一个使用 BeanFactory 的 BeanContainer 实现,以便转换器和实体监听器可以使用常规依赖注入。

你可以通过注册一个 HibernatePropertiesCustomizer 来禁用或调优此行为,该类将删除或更改 hibernate.resource.beans.container 属性。

84.9、使用自定义 EntityManagerFactory

要完全控制 EntityManagerFactory 的配置,你需要添加一个名为 entityManagerFactory 的 @Bean。存在该类型的 bean 时,Spring Boot 自动配置关闭其实体管理器。

84.10、使用两个 EntityManagers

即使默认的 EntityManagerFactory 工作正常,你也需要定义一个新的。否则,该类型的第二个 bean 的存在将关闭默认值。为了便于操作,你可以使用 Spring Boot 提供的方便的 EntityManagerBuilder。或者,你可以直接从 Spring ORM 使用 LocalContainerEntityManagerFactoryBean,如下面示例所示:

// add two data sources configured as above@Beanpublic LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(		EntityManagerFactoryBuilder builder) {	return builder			.dataSource(customerDataSource())			.packages(Customer.class)			.persistenceUnit("customers")			.build();}@Beanpublic LocalContainerEntityManagerFactoryBean orderEntityManagerFactory(		EntityManagerFactoryBuilder builder) {	return builder			.dataSource(orderDataSource())			.packages(Order.class)			.persistenceUnit("orders")			.build();}

上面的配置几乎可以独立工作。要完成这幅图,你还需要为两个 EntityManagers 配置 TransactionManagers。如果将其中一个标记为 @Primary,则可以通过 Spring Boot 中的默认 JpaTransactionManager 将其选中。另一个必须显式地注入到一个新实例中。或者,你可以使用跨越两者的 JTA 事务管理器。

如果使用 Spring Data,则需要相应地配置 @EnableJpaRepositories,如下面示例所示:

@Configuration@EnableJpaRepositories(basePackageClasses = Customer.class,		entityManagerFactoryRef = "customerEntityManagerFactory")public class CustomerConfiguration {	...}@Configuration@EnableJpaRepositories(basePackageClasses = Order.class,		entityManagerFactoryRef = "orderEntityManagerFactory")public class OrderConfiguration {	...}

84.11、使用传统的 persistence.xml 文件

默认情况下,Spring Boot 不会搜索或使用 META-INF/persistence.xml。如果你喜欢使用传统的 persistence.xml,则需要定义自己的 LocalEntityManagerFactoryBean 类型的 @Bean(ID 为 entityManagerFactory),并在其中设置持久化单元名称。

有关默认设置,请参见 JpaBaseConfiguration。( )

84.12、使用 Spring Data JPA 和 Mongo 存储库

Spring Data JPA 和 Spring Data Mongo 都可以自动为你创建 Repository 实现。如果它们都出现在类路径上,你可能需要做一些额外的配置来告诉 Spring Boot 要创建哪些存储库。要做到这一点,最明确的方法是使用标准的 Spring Data @EnableJpaRepositories 和 @EnableMongoRepositories 注解,并提供 Repository 接口的位置。

还有一些标志(spring.data.*.repositories.enabled 和 spring.data.*.repositories.type)可用于在外部配置中打开和关闭自动配置的存储库。这样做很有用,例如,如果您想关闭 Mongo 存储库,仍然使用自动配置的 MongoTemplate。

对于其他自动配置的 Spring Data 存储库类型(Elasticsearch 、 Solr 和其他),存在相同的障碍和相同的功能。要使用它们,请相应地更改注解和标志的名称。

84.13、自定义 Spring Data 的 Web 支持

Spring Data 提供了 web 支持,可简化 web 应用程序中 Spring Data 存储库的使用。Spring Boot 在 spring.data.web 命名空间中提供属性,用于自定义其配置。请注意,如果使用的是 Spring Data REST,则必须改用 spring.data.rest 命名空间中的属性。

84.14、将 Spring Data 存储库作为 REST 端点公开

如果已经为应用程序启用了 Spring MVC,Spring Data REST 可以将存储库实现公开为 REST 端点。

Spring Boot 公开了一组有用的属性(来自 spring.data.rest 命名空间),它们自定义 RepositoryRestConfiguration。如果你需要提供额外的定制,则你应该使用 RepositoryRestConfigurer bean。

注释:如果没有在自定义 RepositoryRestConfigurer 上指定任何顺序,那么它将在 Spring Boot 内部地使用一个之后运行。如果需要指定顺序,请确保该顺序高于 0。

84.15、配置 JPA 使用的组件

如果要配置 JPA 使用的组件,则需要确保在 JPA 之前初始化该组件。当自动配置组件时,Spring Boot 会为你处理此问题。例如,当 Flyway 自动配置时,Hibernate 被配置为依赖 Flyway,以便 Flyway 有机会在 Hibernate 尝试使用数据库之前初始化数据库。

如果你自己正在配置组件,则可以使用 EntityManagerFactoryDependsOnPostProcessor 子类作为设置必要依赖项的便捷方式。例如,如果将带有 Elasticsearch 的 Hibernate Search 用作其索引管理器,则必须将任何 EntityManagerFactory bean 配置为依赖于 elasticsearchClient bean,如下面示例所示:

/** * {@link EntityManagerFactoryDependsOnPostProcessor} that ensures that * {@link EntityManagerFactory} beans depend on the {@code elasticsearchClient} bean. */@Configurationstatic class ElasticsearchJpaDependencyConfiguration extends EntityManagerFactoryDependsOnPostProcessor {	ElasticsearchJpaDependencyConfiguration() {		super("elasticsearchClient");	}}

84.16、使用两个数据源配置 jOOQ

如果你需要将 jOOQ 与多个数据源一起使用,你应该为每个数据源创建自己的 DSLContext。有关更多详细信息,请参考 JooqAutoConfiguration。( )

提示:特别是,JooqExceptionTranslator 和 SpringTransactionProvider 可以重用,以提供与自动配置对单个 DataSource 所做的类似的功能。

上一篇[84.3、使用Spring Data 存储库]

下一篇[85、数据库初始化]

标签: #配置hibernate需要注入的属性名称