Spring boot 如何使用springbootconfig配置JOOQ设置?

Spring boot 如何使用springbootconfig配置JOOQ设置?,spring-boot,jooq,Spring Boot,Jooq,我想告诉JOOQ不要在它根据以下答案生成的SQL中引用标识符: 但考虑到我让Spring Boot自动配置JOOQ,我应该把这个设置放在哪里 基本spring引导配置似乎只支持在application.properties中设置spring.jooq.sql方言 我尝试将spring.jooq.renderNameStyle=AS_放在application.properties中,但对SQL没有任何影响 有没有办法定制Spring boot JOOQ配置而不必自己配置JOOQ 我使用的是Spr

我想告诉JOOQ不要在它根据以下答案生成的SQL中引用标识符:

但考虑到我让Spring Boot自动配置JOOQ,我应该把这个设置放在哪里

基本spring引导配置似乎只支持在
application.properties
中设置
spring.jooq.sql方言

我尝试将
spring.jooq.renderNameStyle=AS_
放在
application.properties
中,但对SQL没有任何影响

有没有办法定制Spring boot JOOQ配置而不必自己配置JOOQ


我使用的是SpringBoot 2.1.7.RELEASE和JOOQ 3.11.12。

Spring Boot是一个工具包,可以让您尽快开始使用一些依赖项。这并不意味着你应该通过SpringBoot做所有的事情。Spring Boot不可能维护一个对应于每个第三方库的标志的标志

spring boot之所以支持
spring.jooq.sql方言
,是因为在某些情况下,jooq无法从JDBC
连接
数据源
自动检测方言,因此spring boot有必要向jooq提供该信息。另一方面,
Settings.renderNameStyle
是一个更高级的设置,Spring Boot不需要知道它就可以启动最低配置

因此,一旦开始使用更复杂的库设置/标志,就需要自己配置库。在本例中,您可以通过编程方式或通过其他各种Spring惯用方式提供
DSLContext
bean,例如:

@自动连线数据源ds;
@豆子
公共上下文ctx(){
DSL.using(ds,sqldialent.ORACLE,new Settings(),with rendernamestyle(原样));
}

然后到处注入
DSLContext

注意,Lukas的回答用于配置渲染样式,但导致
JOOQ
不再参与
Spring
事务处理

下面是我添加到项目中用于自定义标识符呈现的代码

import org.jooq.DSLContext;
导入org.jooq.sqldial;
导入org.jooq.conf.RenderNameStyle;
导入org.jooq.conf.Settings;
导入org.jooq.impl.DataSourceConnectionProvider;
导入org.jooq.impl.DefaultConfiguration;
导入org.jooq.impl.DefaultDSLContext;
导入org.jooq.impl.DefaultExecuteListenerProvider;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.autoconfigure.jooq.JooqExceptionTranslator;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
导入org.springframework.stereotype.Component;
导入javax.sql.DataSource;
/**
覆盖spring引导配置,以便定制JOOQ设置。
见:https://stackoverflow.com/q/57542573/924597
Spring启动配置取自:
https://github.com/eugenp/tutorials/blob/master/spring-jooq/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java
*/
@组成部分
@配置
公共类JooqConfig{
@自动连线数据源;
@豆子
公共数据源连接提供程序connectionProvider(){
返回新的数据源连接提供程序(
新TransactionWaredatasourceProxy(数据源));
}
@豆子
公共dsl上下文dsl(){
返回新的DefaultDSLContext(configuration());
}
公共DefaultConfiguration配置(){
DefaultConfiguration配置=新的DefaultConfiguration();
set(connectionProvider());
config.set(sqldialent.POSTGRES);
config.set(新设置()。
使用RenderNameStyle(RenderNameStyle.AS_IS));
config.set(新的DefaultExecuteListenerProvider(
新JooqExceptionTranslator());
返回配置;
}
}
注意:上面的代码似乎正常工作,但导致我的IDE告诉我有多个bean注册为
DSLContext
类型。我还将
JooqAutoConfigration
添加到我排除的
springboot
自动配置列表中

@EnableAutoConfiguration(排除={
SecurityAutoConfiguration.class,
DataSourceAutoConfiguration.class,
JooqAutoConfiguration.class
})

您还可以提供一个设置bean(它返回一个
org.jooq.conf.Settings
对象)

解决原始问题的示例:

@Component
public class JooqConfig {

    @Bean
    Settings jooqSettings() {
        return new Settings().withRenderNameStyle(RenderNameStyle.AS_IS);
    }
}

Spring Boot文档目前正在使用中,但我检查了并在本地进行了测试,我创建了一个解决方案。

如我在回答中所述,由于TX处理,这对我不起作用。如果另一个答案有任何明显的问题,你能评论一下吗?谢谢你的公关,这将从Spring Boot 2.1.10和2.2.1开始记录