package com.wise.powerhub.util; import javax.sql.DataSource; import org.jooq.impl.DataSourceConnectionProvider; import org.jooq.impl.DefaultConfiguration; import org.jooq.impl.DefaultDSLContext; import org.jooq.impl.DefaultExecuteListenerProvider; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.autoconfigure.jooq.JooqExceptionTranslator; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; @Configuration public class DataSourceConfig { @Bean("dataSourceProperties") @ConfigurationProperties(prefix = "spring.datasource.shiro") public DataSourceProperties loadShiroProperties() { return new DataSourceProperties(); } @Bean(name = "dataSource") public DataSource initShiroDataSource() { return loadShiroProperties().initializeDataSourceBuilder().build(); } @Bean(name = "jooqConnectionProvider") public DataSourceConnectionProvider initJooqConnectionProvider(@Qualifier("dataSource") DataSource dataSource) { return new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource)); } @Bean(name = "jooqDefaultConfiguration") public DefaultConfiguration initJooqDefaultConfiguration(@Qualifier("jooqConnectionProvider") DataSourceConnectionProvider dataSourceConnectionProvider) { DefaultConfiguration defaultConfiguration = new DefaultConfiguration(); defaultConfiguration.set(dataSourceConnectionProvider); defaultConfiguration.set(new DefaultExecuteListenerProvider(new JooqExceptionTranslator())); return defaultConfiguration; } @Bean(name = "jooqDefaultDslContext") public DefaultDSLContext initDefaultDslContext(@Qualifier("jooqDefaultConfiguration") DefaultConfiguration defaultConfiguration) { return new DefaultDSLContext(defaultConfiguration); } }