저는 스프링이 jOOQ로 거래를 처리하도록하고 있습니다.
이 스프링 구성 클래스입니다 : 여기에 어떻게
@Configuration
public class SpringConfiguration
{
@Bean
public DataSource dataSource() throws PropertyVetoException
{
comboPooledDataSource.setDriverClass(org.postgresql.Driver.class.getName());
comboPooledDataSource
.setJdbcUrl("jdbc:postgresql://localhost:5432/database?searchpath=schema");
comboPooledDataSource.setUser("databaseuser");
comboPooledDataSource.setPassword("password");
comboPooledDataSource.setMinPoolSize(5);
comboPooledDataSource.setAcquireIncrement(5);
comboPooledDataSource.setMaxPoolSize(25);
return comboPooledDataSource;
}
@Bean
public DataSourceTransactionManager transactionManager() throws PropertyVetoException
{
return new DataSourceTransactionManager(dataSource());
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource() throws PropertyVetoException
{
return new TransactionAwareDataSourceProxy(dataSource());
}
@Bean
public DataSourceConnectionProvider connectionProvider() throws PropertyVetoException
{
return new DataSourceConnectionProvider(transactionAwareDataSource());
}
@Bean
public org.jooq.Configuration configuration() throws PropertyVetoException
{
return new DefaultConfiguration().set(connectionProvider()).set(transactionProvider()).set(SQLDialect.POSTGRES);
}
@Bean
public TransactionProvider transactionProvider() throws PropertyVetoException
{
return new SpringTransactionProvider(transactionManager());
}
@Bean
public DSLContext dslContext() throws PropertyVetoException
{
return DSL.using(configuration());
}
}
그리고 이것은 SpringTransactionProvider
입니다 :
public class SpringTransactionProvider implements TransactionProvider
{
DataSourceTransactionManager transactionManager;
public SpringTransactionProvider(DataSourceTransactionManager transactionManager)
{
this.transactionManager = transactionManager;
}
@Override
public void begin(TransactionContext ctx)
{
TransactionStatus tx = transactionManager.getTransaction(new DefaultTransactionDefinition(
TransactionDefinition.PROPAGATION_REQUIRED));
ctx.transaction(new SpringTransaction(tx));
}
@Override
public void commit(TransactionContext ctx)
{
transactionManager.commit(((SpringTransaction) ctx.transaction()).tx);
}
@Override
public void rollback(TransactionContext ctx)
{
transactionManager.rollback(((SpringTransaction) ctx.transaction()).tx);
}
class SpringTransaction implements Transaction
{
final TransactionStatus tx;
SpringTransaction(TransactionStatus tx)
{
this.tx = tx;
}
}
}
그리고 마지막으로 DSLContext
얻을 :
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
DSLContext dslContext=applicationContext.getBean(DSLContext.class);
을 당신 이것을 작동 시키려면 classpath에 그 항아리가 필요합니다 :`당신이 게시 된 코드를 실행하면, 같은 동작을 :spring-tx.jar
, spring-aop.jar
, spring-expression.jar
, spring-core.jar
, spring-beans.jar
, spring-jdbc.jar
및 spring-context.jar
:
'나는 이것과 매우 유사한 코드가? – PeterMmm
사용중인 jOOQ 버전은 무엇입니까? 'comboPooledDataSource'가 어떻게 구성되어 있는지 보여줄 수 있습니까? –
@ LukasEder JOOQ 버전 3.9.1을 사용하고 있으며 질문을 업데이트했습니다. – Thunder