事务管理Spring框架

时间:2014-05-29 22:59:23

标签: java spring transactions

在学习spring框架时,我目前正处于事务管理主题,虽然我不是100%反对使用xml,但我一直在尝试使用注释来做所有事情。随之而来的是这个事务管理事物和教师只是把它放到xml文件中并引用我用注释创建的DataSource bean

......下面......

package com.udemy.learning.main;

import java.sql.SQLException;
import javax.sql.DataSource;
import javax.annotation.*;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("connect")
public class Connections extends BasicDataSource{

    @Value("${jdbc.user}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.driver}")
    private String driverClassName;

    @Value("${jdbc.url}")
    private String url;

    public DataSource connect() throws SQLException{
        super.setDriverClassName(this.driverClassName);
        super.setUrl(this.url);
        super.setUsername(this.username);
        super.setPassword(this.password);

        return super.createDataSource();
    }

    @PreDestroy
    public void close() {
        try {
            super.close();
            System.out.println("Connection closed");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

因此,在尝试使用代码和注释完成所有操作时,我创建了一个TransactionManager类,并在其上方使用了@Component注释。我相信你可以想象看起来像什么,所以我不会放弃它,加上我认为它看起来相当初级。

无论如何,长问题很短......

有没有办法以我尝试的方式进行此事务管理配置?而不是严格的xml?我的尝试最终导致了如下错误......

Bean named 'transactionManager' must be of type [org.springframework.transaction.PlatformTransactionManager], but was actually of type [com.udemy.learning.main.TransactionManager]

1 个答案:

答案 0 :(得分:0)

您需要将bean设置为PlatformTransactionManager类型,以便在PlatformTransactionManager类中扩展TransactionManager。发生异常是因为Spring期望任何事务管理器成为PlatformTransactionManager

的子类