在代码中使用Spring的TransactionAwareDataSourceProxy,而不是xml

问题描述 投票:0回答:2

我正在尝试get jOOQ transactions to work,除了使用代码而不是XML配置。我认为应该简单到

// inside @Configuration annotated class
@Bean
public DataSource makeTransactionAware(DataSource fromConnectionPool) {
  return new TransactionAwareDataSourceProxy(fromConnectionPool);
}

例外,我需要告诉Spring注入的DataSource与方法返回的不相同。我该怎么办?

java spring jooq spring-transactions
2个回答
2
投票

Bean自定义命名和限定符应为您完成工作。

https://www.baeldung.com/spring-qualifier-annotation

@Bean(name = "txAwareDS")
public DataSource makeTransactionAware(@Qualifier("dataSource) DataSource fromConnectionPool) {
    return new TransactionAwareDataSourceProxy(fromConnectionPool);
}

示例代码只是一个起点。


0
投票

Spring configuration file共享中

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
    <!-- These properties are replaced by Maven "resources" -->
   <property name="url" value="${db.url}" />
   <property name="driverClassName" value="${db.driver}" />
   <property name="username" value="${db.username}" />
   <property name="password" value="${db.password}" />
</bean>
<bean id="transactionAwareDataSource"
        class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
        <constructor-arg ref="dataSource" />
 </bean>

将配置为

@Configuration
@PropertySource("classpath:config.properties")
public class DataSourceConfig{

    @Value("${db.username}")
    private String username;
    @Value("${db.password}")
    private String password;
    @Value("${db.url}")
    private String url;

        @Bean
        public DataSource dataSource() {
            BasicDataSource basicDataSource = new BasicDataSource();
            basicDataSource.setDriverClassName("<driver class name>"); // Spring will load the driver discovered if not specified explicitly.
            basicDataSource.setUsername(username);
            basicDataSource.setPassword(password);
            basicDataSource.setUrl(url);
         return basicDataSource;
        }

        @Bean
        public TransactionAwareDataSourceProxy transactionAwareDataSource(DataSource dataSource) {
            return new TransactionAwareDataSourceProxy(dataSource)
        }
    }

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.