背景:我正在我的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);
}
答案 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一起使用。