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

未在Micronaut项目中创建jOOQ DSLContext Bean

盖诚
2023-03-14

我试图在我的Micronaut应用程序中使用jOOQ,并将jOOQ DSLContext作为一个注入bean自动提供给我的构造函数,但它无法找到该bean。

我在application.yml中配置了数据源以连接到postgres db,并声明了如下构造函数:

@Singleton
public class RepositoryImpl implements Repository
{
    private final DSLContext context;

    public RepositoryImpl(DSLContext context)
    {
        this.context = context;
    }
}
datasources:
  default:
    url: "jdbc:postgresql://localhost:5432/my_db"
    username: "user"
    password: "password"
    driver-class-name: "org.postgresql.Driver"

我在我的构建中包含了以下依赖项。gradle

    compile 'io.micronaut.configuration:micronaut-jooq'
    runtime 'org.postgresql:postgresql:42.2.4'

我希望可以访问DSLContext并在RepositoryImpl类中编写查询,但在尝试使用implementation类时,代码失败了,但出现以下异常:

Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [org.jooq.DSLContext] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).

有没有人能够成功地使用这个bean,就像这里的micronaut-sql指南中所描述的那样?https://micronaut-projects.github.io/micronaut-sql/snapshot/guide/index.html#jooq

共有1个答案

姬翰林
2023-03-14

dslcontext存在于org.jooq.configuration上,因此首先必须实例化后一个。

您可以定义一个用@factory注释的类,并将javax.sql.datasource注入其包含Micronaut数据源配置的构造函数。之后,您应该在该类中定义一个方法(用@singleton注释),该方法应该返回一个org.jooq.configuration。在此方法中,您可以配置jOOQ,基本上您可以使用defaultconfiguration(),但是您必须通过在其上调用setSQLDialect(SqlDialt.Postgres)来设置您的SQL方言,您还必须设置您的数据源(set(datasource)

import io.micronaut.context.annotation.Factory;
import org.jooq.Configuration;
import org.jooq.SQLDialect;
import org.jooq.impl.DefaultConfiguration;

import javax.inject.Singleton;
import javax.sql.DataSource;

@Factory
public class JooqConfigurationFactory {
    private final DataSource dataSource;

    public JooqConfigurationFactory(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Singleton
    public Configuration configuration() {
        DefaultConfiguration configuration = new DefaultConfiguration();
        configuration.setSQLDialect(SQLDialect.POSTGRES);
        configuration.set(dataSource);

        return configuration;
    }
}

您的存储库将如下所示:

import org.jooq.Configuration;
import org.jooq.DSLContext;

public class ExampleRepository {
    private final DSLContext context;

    public ExampleRepository(Configuration config) {
        this.context = config.dsl();
    }
}

 类似资料:
  • 创建任何新的 Android 项目后,Eclipse 会自动创建一个“appcompat_v7”项目,而 /src 下没有任何文件。我不知道Eclipse是如何或为什么创建这个项目的。我也得到了一个奇怪的错误。 正如你看到的AndroidManifest。项目中存在xml! EDIT1:清理项目后,奇怪的错误消失了,但我仍然想知道为什么创建appcompat_v7。 EDIT2:我还注意到Ecli

  • 使用 @vue/cli 推荐用脚手架工具 @vue/cli 来创建一个使用 vue-loader 的项目: npm install -g @vue/cli vue create hello-vue cd hello-vue npm run serve # ready to go!

  • 点击顶部导航右上角"+"按钮,可进入创建项目页。 主要操作步骤: 选择目录:首先在本地文件浏览器中选择需要创建项目的目录,点击创建 选择模板:可选择预置脚手架或自定义脚手架 输入配置:输入项目需要的初始化信息 依赖安装:配置完成后系统会自动执行依赖安装 创建完成 San CLI UI中的文件浏览器可实现功能: 目录切换:可以通过点击路径切换,或者直接点击编辑后输入本地路径 目录收藏:对本地路径进行

  • 创建 Rust 项目 创建项目 我们首先创建一个整个项目的目录,并在工作目录中首先创建一个名为 rust-toolchain 的文件,并在其中写入所需要的工具链版本: rust-toolchain nightly-2020-06-27 之后在目录内部使用 cargo new 命令在我们的项目目录内创建一个新的 Rust 项目 os,命令如下: 运行命令 cargo new os 这里我们把项目

  • 首先,打开Android Studio并选择Create new Project,然后它会让你输入一个名字,你可以任意取一个名字,比如:Weather App。然后你需要输入公司域名。如果你不会真正发布这个app,这个字段就不是特别重要了,但是如果你有的话可以使用自己的域名。然后任意选择一个目录作为这个项目的保存地址。 下一步,它会让你选择最小的API版本。我们选择API 15,因为我们有一个库需

  • firstServlet.java的代码- 在这个文件中,web-app标记显示了一条带有错误消息的红线-web-app元素是web应用程序的部署描述符的根。 来源:web-app_2_3.dtd 元素类型“web-app”的内容必须与“(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-ma