当前位置: 首页 > 知识库问答 >
问题:

R2DBC 和 Spring 数据集成问题

盖昊东
2023-03-14

我有spring boot项目(版本< code>2.4.6),带有spring数据依赖项(< code > spring-boot-starter-data-JPA )和postgreSQL驱动程序。

在项目中,我们使用Hibernate和数据存储库,通过以下方式配置:

@EnableSpringDataCommons(basePackages = ["..."]) // path to folder with repositories
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
@EnableTransactionManagement
@Configuration
class PersistenceConfig

我还想加入反应性R2DBC。我的计划是在一个特定的地方使用它,在那里我们与其他系统集成,这样的通信通过反应式数据流进行。根据它,我需要主动更新数据库中的一些状态。这就是为什么我添加了下一个依赖项:

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-r2dbc</artifactId>
     <version>2.4.6</version>
</dependency>
dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

而且,下一个属性配置:

spring:
    name: configuration
    url: jdbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DBNAME}
    username: ${POSTGRES_USERNAME}
    password: ${POSTGRES_PASSWORD}
    driverClassName: org.postgresql.Driver
    hikari:
      maximum-pool-size: 2
  jpa:
    database: POSTGRESQL
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    generate-ddl: false
    open-in-view: false
    properties:
      javax:
        persistence:
          validation:
            mode: auto
      hibernate:
        temp:
          use_jdbc_metadata_defaults: false
        jdbc:
          time_zone: UTC
          lob.non_contextual_creation: true
    hibernate:
      ddl-auto: none
  r2dbc:
    url: r2dbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DBNAME}
    username: ${POSTGRES_USERNAME}
    password: ${POSTGRES_PASSWORD}
  liquibase.change-log: classpath:/db/changelog-master.xml

最后,我有这样的数据层逻辑服务:

@Service
class MyDataReactiveService(
    val operator: TransactionalOperator,
    val template: R2dbcEntityTemplate
) {

    fun updateObjectStatus(state: String, objectId: UUID): Mono<Int> =
        template
            .update(ObjectEntity::class.java)
            .matching(query(Criteria.where("id").`is`(objectId)))
            .apply(update("state", state))
            .`as` { operator.transactional(it) }
}

其中< code>ObjectEntity -常规spring数据实体。但是,不幸的是,我在应用程序启动时出现了下一个错误(内部测试):

Field objectRepository in com.slandshow.TestManager required a bean named 'entityManagerFactory' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean named 'entityManagerFactory' in your configuration.

<code>TestManager</code>-带有注入bean的测试包装器:

@Service
class TestManager {

    @Autowired
    lateinit var objectRepository: ObjectRepository
    ...
}

ObjectRepostory

interface ObjectRepository : JpaRepository<ObjectEntity> {
  ...
}

据我所知,这些问题与r2dbc和spring数据配置错误有关。但是我该怎么解决呢?

共有1个答案

苏翰学
2023-03-14

因为您没有发布ObjectRepository的代码,所以很难说什么是错误的。然而,我不建议在同一数据库的同一个项目中使用JPAR2DBCWebClient进行HTTP调用,并使用KotlinCoroutine)。在我看来,这将是更好的方法。然而,所有这一切都取决于您的应用程序,即在调用后您将触发多少查询等等。

 类似资料:
  • 我正在尝试迁移到Spring Data R2DBC,我找不到对Amazon Redshift数据库的支持,如果有支持,有人可以帮助我吗? 下面是spring文档url,它支持的数据库很少,但红移不在列表中。https://spring.io/projects/spring-data-r2dbc

  • 我正在使用DatabaseClient执行sql查询,我不知道如何通过以下方式进行分组:

  • 我创建了一个新示例,并将代码分为客户端和服务器端。 完整的代码可以在这里找到。 服务器端有3个版本。 服务器无Spring Boot应用程序,使用Spring Integration RSocket InboundGateway 服务器引导重用Spring RSocket autconfiguration,并通过serverrsocketmessagehandler创建ServerRSocketC

  • 我试图使用Spring Data连接Elasticsearch 6.1(我使用Spring Boot) 但是提到最新版本只支持5.2。,有没有支持ES 6.1的替代方案? https://github.com/spring-projects/spring-data-elasticsearch/blob/master/README.md

  • 带有Hibernate的Spring数据JPA支持注释和。基于这些,实体类之间的继承映射到DB(单表/联接表https://stackoverflow.com/a/3579462/12053054)。 我找不到任何类似的机制来支持Spring data r2dbc的实体继承。我知道JPA和Hibernate的东西与r2dbc无关,但我认为在Spring data r2dbc存储库中支持继承没有任何

  • 我正在尝试将Spring Security性与LDAP集成。使用spring core版本4.0.5,spring security版本3.2.2和spring ldap版本1.3.2。这是我的安全配置xml