【问题标题】:Spring 3 Annotations: xml-less Declarative Transaction ManagementSpring 3 注释:无 xml 的声明式事务管理
【发布时间】:2013-07-05 06:40:07
【问题描述】:

我正在按照教程 here 创建一个纯注释驱动(无 xml)spring 3 应用程序

这是我的配置文件

@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
    DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
    driverManagerDataSource.setDriverClassName("org.postgresql.Driver");
    driverManagerDataSource.setUrl("jdbc:postgresql://localhost:5432/test");
    driverManagerDataSource.setUsername("postgres");
    driverManagerDataSource.setPassword("gayle");
    return driverManagerDataSource;
}

@Bean(name = "studentJDBCTemplate")
public StudentJDBCTemplate studentJDBCTemplate() {
    StudentJDBCTemplate studentJDBCTemplate = new StudentJDBCTemplate();
    studentJDBCTemplate.setDataSource(dataSource());
    studentJDBCTemplate.setDataSourceTransactionManager(dataSourceTransactionManager());
    studentJDBCTemplate.setJdbcTemplate(new JdbcTemplate());
    return studentJDBCTemplate;
}

@Bean
public DataSourceTransactionManager dataSourceTransactionManager() {
    DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
    dataSourceTransactionManager.setDataSource(dataSource());
    return dataSourceTransactionManager;
}

现在我正在尝试执行 declarative transaction management 因此我在 StudentJDBCTemplate 中的 create() 方法

public void create(String name, Integer age) {
    System.out.println("Creating!");
    String SQL = "insert into Student (name, age) values (?, ?)";
    jdbcTemplate.update(SQL, name, age);
    System.out.println("Created Record Name=" + name + " Age=" + age);
}

不以编程方式调用事务管理器。

我如何实现这一目标?我必须声明@Aspect 才能执行此操作吗?有没有可以自动配置何时提交事务的注解?

【问题讨论】:

    标签: java spring annotations


    【解决方案1】:

    您想使用@Transactional 注释。 Here's the documentation for it. 具体请参见第 10.5.1 节。您需要做的就是注释您希望使用注释包裹事务的方法。使用注解的值,您可以指定任何您想要的关于事务类型的内容。

    【讨论】:

    • 嗨,我在StudentJDBCTemplate 类中的create() 方法中添加了@Transactional,现在我使用Maven 得到testApp(com.keeboi.samples.springexample.AppTest): No qualifying bean of type [com.keeboi.samples.springexample.templates.StudentJDBCTemplate] is defined,顺便说一句,我已经添加了所需的依赖项。请注意,如果没有@Transactional,它运行良好
    • @EnableTransactionManagement 添加到您的配置类中。
    • 已经在这个问题之前添加了@EnableTransactionManagement,但我仍然收到错误:(
    • 在这种情况下,问题可能是 JDBCTemplate 是您应该使用的类,而不是您应该(大概?)扩展的类。相反,请尝试将 @Bean 切换为普通的 JdbcTemplate。另外,请注意,该文档明确表示不需要对其进行子类化。然后将您的 create 方法放在 JdbcTemplate 中注释为 @Repository@Autowire 的类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2011-04-12
    • 2011-10-06
    相关资源
    最近更新 更多