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

时间:2017-03-29 19:17:23

标签: java sql spring-boot jooq

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

我的application.properties

中有这一行
jooq.sql-dialect=ORACLE

但是当我检查注入的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);
}

2 个答案:

答案 0 :(得分:7)

Lukas的评论Spring Boot JOOQ sql dialect not picked up from application.properties是正确的。

以下是如何进行测试的示例:

内部application.properties

spring.jooq.sql-dialect = Postgres

使用集成测试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));
    }
}

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

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

中找到常量

答案 1 :(得分:1)

Spring Boot by default uses the org.jooq dependency,这是jOOQ开源版的Maven groupId

<dependency>
    <groupId>org.jooq</groupId>
    <artifactId>jooq</artifactId>
</dependency>

但是,Oracle SQLDialect仅包含在jOOQ的商业发行版中,可在不同的groupId下使用(而不是来自Maven Central,但来自here (trial)here (express, professional, enterprise edition) ):

<groupId>org.jooq.pro</groupId>        <!-- for commercial editions -->
<groupId>org.jooq.pro-java-6</groupId> <!-- for commercial editions with Java 6 support -->
<groupId>org.jooq.trial</groupId>      <!-- for the free trial edition -->

这些发行版几乎完全是二进制兼容的,因此您应该只需将自己的pom.xml中的<groupId>替换为Spring Boot即可与jOOQ和Oracle一起使用。