gpt4 book ai didi

java - 未在 Micronaut 项目中创建 jOOQ DSLContext Bean

转载 作者:行者123 更新时间:2023-11-29 12:23:15 33 4
gpt4 key购买 nike

我正在尝试在我的 Micronaut 应用程序中使用 jOOQ,并让 jOOQ DSLContext 自 Action 为注入(inject)的 bean 提供给我的构造函数,但它找不到该 bean。

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

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

public RepositoryImpl(DSLContext context)
{
this.context = context;
}
}

和我的 application.yml 为:

datasources:
default:
url: "jdbc:postgresql://localhost:5432/my_db"
username: "user"
password: "password"
driver-class-name: "org.postgresql.Driver"

我在我的 build.gradle 中包含了以下依赖项

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

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

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).

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

最佳答案

DSLContext 存在于 org.jooq.Configuration 上,所以首先你必须以某种方式实例化后者。

您可以定义一个用 @Factory 注释的类,并将 javax.sql.DataSource 注入(inject)到它的构造函数中,该构造函数包含 Micronaut 数据源配置。之后你应该在这个类中定义一个方法(用@Singleton注释),这个方法应该返回一个org.jooq.Configuration。在这个方法中你可以配置 jOOQ,基本上你可以使用 DefaultConfiguration(),但是你必须通过调用 setSQLDialect(SQLDialect.POSTGRES) 来设置你的 SQL 方言,并且您还必须设置数据源 (set(datasource)),并将数据源注入(inject)到类中。

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();
}
}

关于java - 未在 Micronaut 项目中创建 jOOQ DSLContext Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com