Postgres spring boot R2dbc 应用程序中缺少 DatabaseClient

2024-03-04

我出现以下错误:

Exception: Error creating bean with name 'inventoryService' defined in URL [jar:file:/app.jar!/BOOT-INF/classes!/com/epi/services/inventory/items/InventoryService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemRepository': Cannot resolve reference to bean 'databaseClient' while setting bean property 'databaseClient'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'databaseClient' available


2019-06-18 18:38:41,409 INFO  [main] org.apache.juli.logging.DirectJDKLog: Stopping service [Tomcat]


WARNING: An illegal reflective access operation has occurred


WARNING: Illegal reflective access by org.apache.catalina.loader.WebappClassLoaderBase (jar:file:/app.jar!/BOOT-INF/lib/tomcat-embed-core-8.5.29.jar!/) to field java.lang.Thread.threadLocals


WARNING: Please consider reporting this to the maintainers of org.apache.catalina.loader.WebappClassLoaderBase


WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations


WARNING: All illegal access operations will be denied in a future release


2019-06-18 18:38:45,424 INFO  [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener: 




Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.


2019-06-18 18:38:50,695 ERROR [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter: 




***************************


APPLICATION FAILED TO START


***************************




Description:




Parameter 0 of constructor in com.epi.services.inventory.items.InventoryService required a bean named 'databaseClient' that could not be found.






Action:




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

我的应用程序具有以下类和依赖项:

主模块内部:

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </dependency>
        <dependency>
            <groupId>myGroupId</groupId>
            <artifactId>myModule.dblib</artifactId>
            <version>${project.version}</version>
        </dependency>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectreactor</groupId>
            <artifactId>reactor-spring</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
        </dependency>
    </dependencies>

App:

@SpringBootApplication(scanBasePackages = "com.pack")
@EntityScan("com.pack")
@EnableR2dbcRepositories
@Import(DatabaseConfiguration.class)
public class InventoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(InventoryApplication.class, args);
    }

}

Service:

@Service
@RequiredArgsConstructor
public class InventoryService {

    private final ItemRepository itemRepository;

    public Flux<ItemPojo> getAllItems() {
        return itemRepository.findAllItems()
                             .map(Item::toPojo);
    }
}

Repo:

    @Repository
public interface ItemRepository extends ReactiveCrudRepository<Item, Long> {

    Flux<List<Item>> findByName(String name);

    @Query("select i from Item i")
    Flux<Item> findAllItems();

}

Entity:

@Data
@Table(name = "items")
public class Item implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    public static ItemPojo toPojo(final Item items) {
        return new ItemPojo(items.id, items.name);
    }
}

myModule.dblib:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectreactor</groupId>
            <artifactId>reactor-spring</artifactId>
        </dependency>
    </dependencies>

数据库配置:

@Configuration
@EnableR2dbcRepositories
public class DatabaseConfiguration {

    @Value("${spring.data.postgres.host}") private String host;
    @Value("${spring.data.postgres.port}") private int port;
    @Value("${spring.data.postgres.database}") private String database;
    @Value("${spring.data.postgres.username}") private String username;
    @Value("${spring.data.postgres.password}") private String password;

    @Bean
    public PostgresqlConnectionFactory connectionFactory() {
            return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
                                                    .host(host)
                                                    .port(port)
                                                    .database(database)
                                                    .username(username)
                                                    .password(password)
                                                    .build());
        }
}

我缺少什么?


我将无耻地插入我自己的关于如何开始使用 R2DBC postgres 和 spring boot 的文章。

R2DBC 入门 https://medium.com/@thomasandolf/r2dbc-getting-started-d0afcfc05be2

我认为你的问题在于如何启动数据库连接工厂。根据文档,您需要扩展和覆盖AbstractR2dbcConfiguration#connectionFactory

@Configuration
@EnableR2dbcRepositories
public class PostgresConfig extends AbstractR2dbcConfiguration {

    @Override
    @Bean
    public ConnectionFactory connectionFactory() {
        return new PostgresqlConnectionFactory(
                PostgresqlConnectionConfiguration.builder()
                .host("localhost")
                .port(5432)
                .username("postgres")
                .password("mysecretpassword")
                .database("myDatabase")
                .build());
    }
}

官方文档

这种方法允许您使用标准 io.r2dbc.spi.ConnectionFactory 实例,容器使用 Spring 的 AbstractR2dbcConfiguration。

与直接注册 ConnectionFactory 实例相比,配置支持还有一个额外的优势,即还为容器提供了 ExceptionTranslator 实现,该实现将 R2DBC 异常转换为 Spring 的可移植 DataAccessException 层次结构中的异常,用于使用 @Repository 注释进行注释的数据访问类。

Spring 的 DAO 支持功能中描述了这种层次结构和 @Repository 的使用。

AbstractR2dbcConfiguration 还注册数据库交互和存储库实现所需的 DatabaseClient。

R2DBC 官方文档 https://docs.spring.io/spring-data/r2dbc/docs/current/reference/html/#r2dbc.connectionfactory

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres spring boot R2dbc 应用程序中缺少 DatabaseClient 的相关文章

随机推荐

  • 在 Android 帐户管理器中存储其他数据

    我想使用安卓AccountManager但是 要同步我的网络服务和应用程序 联系人和日历的标准同步 AccountManager似乎只存储用户名和密码 我的 Web 服务需要三个凭据 用户名 密码和帐户 存储第三条信息的最佳实践是什么 正如
  • JPA - 事务未提交

    我正在开发一个项目 在该项目中我第一次使用 JPA Hibernate 和所有这些东西 但我遇到了事务未提交的问题 我使用类 User 如下所示 package org tomasherman JBTBackup Resource Enti
  • 通过正则表达式限制文本中的行数

    在任何编程语言中 我都知道如何有效地限制给定文件或字符串中的行数 这不是这里的问题 然而在这种情况下 我希望通过正则表达式来做到这一点 在这个模式中我只使用 n 换行符 我不需要其他人 例如 r 回车 n n 0 3 上面的正则表达式解释如
  • 通过 ByteBuffer 和 CQL 3 将 Java 对象序列化到 Cassandra 1.2

    我拼凑了下面的代码 它没有做任何复杂的事情 只是创建一个 byte 变量 将其写入 Cassandra 中的 blob 字段 v1 2 通过新的 Datastax CQL 库 然后将其读回又出来了 当我把它放进去时 它是 3 个元素长 当我
  • @AspectJ 类级别注释建议,以注释作为方法参数

    如何获取注释作为定义的建议的参数传递 类级注释 是否可以 来自帖子here https stackoverflow com questions 2011089 aspectj pointcut for all methods of a cl
  • 如何将 COM 对象包装在本机 .NET 类中?

    我在 NET C 中使用广泛的现有 COM API 可能是 Outlook 但事实并非如此 我通过在 Visual Studio 中添加 COM 引用 来完成此操作 因此所有 魔法 都是在幕后完成的 即 我不必手动运行tlbimp 虽然现在
  • 是否可以在不重新加载页面的情况下检查用户是否在 php 中启用了 cookie?

    例如 即使实际设置了 cookie 下面的代码似乎也不起作用 直到我刷新页面 setcookie cookies 1 time 86400 if isset COOKIE cookies cookies foobar 我试图在我的网站上编写
  • 用户关闭应用程序后,如何恢复上次查看的活动?

    用户关闭应用程序后 我如何恢复上次查看的活动 就像 如果用户打开应用程序 第一个活动将出现 当用户单击按钮时 它将继续到下一个活动 如果他关闭应用程序并再次打开 它仍然会显示上次查看的活动 我该怎么做 请帮我 谢谢你 我认为你应该使用共享首
  • 在 iOS 上使用 PhoneGap/Cordova 和外部 URL

    我希望我的phonegap cordova 应用程序加载外部页面 而不加载任何本地页面 现在我这样做了 但是我的插件 javascript 不起作用 因为它们是从本地index html调用的 在这种情况下我该怎么办 我应该将插件放在外部
  • JPA EntityManager:merge() 正在尝试在数据库中创建新行 - 为什么?

    我通过 Play Framework 使用 JPA 我正在检查 User 对象是否被缓存 如果是 我检索它并 merge 它 以便我可以更新字段并稍后保存更改 user User Cache get user auth sessionAut
  • Intellisense 无法识别 python 3 的类型提示

    我想使用 Visual Studio 并使用类型提示 例如在函数参数列表中 查看智能感知 以确定变量的类型 这可以通过以下方式实现isinstance param type 声明 但我想知道我们是否可以在没有这些附加声明的情况下让它工作 注
  • 阻止 Ninject 自动绑定 Func

    我有一个优先级队列 它采用函数作为构造函数参数 public PriorityQueue ISomeOtherInjectedThing other Func
  • Camel是否为每条路线创建一个线程

    最近我开始使用camel 我发现它有可能满足我的许多集成层需求 我创建了一个 java 客户端应用程序 不在任何容器中运行 其中定义了两条路由 路线 1 将文件从传入文件夹 1 移动到文件夹 2 路线2 将文件内容从folderx移动到mq
  • 如何使用多项 Logit 模型的标准误差获得平均边际效应 (AME)?

    我想要获得具有标准误差的多项 Logit 模型的平均边际效应 AME 为此我尝试了不同的方法 但到目前为止还没有达到目标 最好的尝试 我最好的尝试是使用手动获取 AMEmlogit我在下面展示了这一点 library mlogit ml d
  • 如何在swift 4中的webview中显示大量数据

    在我的一个应用程序中 我必须在 Web 视图中显示来自 Web 服务响应的 html 内容 如果html数据较小 那么它将显示在webview中 但是 当 html 内容非常重时 在 Web 视图应用程序中显示的时间就会很长 我做了一件事只
  • 将 Decodable 与继承一起使用会引发异常

    我正在使用 Rest API 服务 其中响应分为基本响应 所有其他响应都继承自它 我正在尝试使用解码器接口为我的响应模型类构建相同的结构 但是我在继承类的解码方面遇到问题 我试图关注这个问题 在 Swift 4 中使用 Decodable
  • 通过 Android API 配置 Exchange 电子邮件帐户

    我想编写一个应用程序 给定用户名和密码 它将 除其他外 在设备上配置交换电子邮件电子邮件帐户 可以通过Android API 来实现吗 如果是这样 通过什么班级 在 3 0 之前的版本中 有一种通过额外传递用户名和密码来配置交换电子邮件的方
  • sklearn 中的 2D KDE 带宽与 scipy 中的带宽之间的关系

    我正在尝试比较性能sklearn neighbors KernelDensity http scikit learn org stable modules generated sklearn neighbors KernelDensity
  • 使用 imagemagick 中的颜色列表重新映射/分离图像颜色

    假设我有这个图像 我想将颜色数量减少到 3 种 如下所示 为此 我应用了以下命令 convert orange jpg remap palette png orange output png where palette png looks
  • Postgres spring boot R2dbc 应用程序中缺少 DatabaseClient

    我出现以下错误 Exception Error creating bean with name inventoryService defined in URL jar file app jar BOOT INF classes com ep