Spring Boot JOOQ sql方言没有从application.properties中获取

Joh*_*son 4 java sql jooq spring-boot

背景:我正在我的nexus存储库中托管jooq 3.9.1(专有,例如oracle db compatible)的试用版 - 我的pom中与jooq相关的所有依赖关系都指向了这一点.

我在application.properties中有这一行

jooq.sql-dialect=ORACLE
Run Code Online (Sandbox Code Playgroud)

但是当我检查注入的dslContext时,方言设置为"DEFAULT"而不是预期/期望的ORACLE.

我目前通过自动装配数据源而不是dslcontext然后设置sql方言(如下所示)来绕过它 - 但是想知道为什么直接自动装配dslcontext不能按预期工作

@Autowired
private DataSourceConnectionProvider dataSource;



public static final SQLDialect sqlDialect = SQLDialect.ORACLE;

public DSLContext getDSL(){
    return DSL.using(dataSource, sqlDialect);
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ons 7

Lukas的评论Spring Boot JOOQ sql方言没有从application.properties中获取是正确的.

这是一个如何做和测试的例子:

在application.properties中

spring.jooq.sql-dialect = Postgres
Run Code Online (Sandbox Code Playgroud)

并通过集成测试进行测试ConfigIT:

@RunWith(SpringRunner.class)
@JdbcTest
@ImportAutoConfiguration(JooqAutoConfiguration.class)
public class ConfigIT {

    @Autowired
    private DSLContext dSLContext;

    @Test
    public void dialectShouldBePickedUp() {
        assertThat(dSLContext.configuration().dialect(), is(SQLDialect.POSTGRES));
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在http://springbootbuch.de的存储库中找到工作和测试的示例:https://github.com/springbootbuch/database_examples

重要的是选择正确的,区分大小写的名称.在我的例子中,它是Postgres,在你的例子中应该是Oracle,你必须使用正确的属性.可悲的是,这些名称因工具集而异.对于jOOQ,你会发现常数org.jooq.SQLDialect