- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的项目中使用 @Transactional
,我在一个方法中有两个 DML 语句。即使在第一个语句之后出现异常,我的第一个 DML 语句也会被执行。我想要它回滚。我该怎么办?我尝试了很多方法但没有帮助。
我的 applicationContext.xml 文件是:
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:flow="http://www.springframework.org/schema/webflow-config"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.0.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
">
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" id="dataSource">
<property name="driverClass" value="org.postgresql.Driver"></property>
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/stats"></property>
<property name="user" value="stats"></property>
<property name="password" value="stats"></property>
<property name="maxPoolSize" value="50" />
<property name="minPoolSize" value="10" />
</bean>
我的服务接口(interface)是:
public interface AssignFAServicesInterface {
public int saveAssignedFA(final String[] CVListCode, final int userCodeFA, final String randomNoColumn, final String[] tourFrom, final String[] tourTo);
}
我的服务实现是:
@Service("assignFAServices")
public class AssignFAServices implements AssignFAServicesInterface{
@Autowired
AssignFADaoInterface assignFADaoInterface;
@Override
@Transactional(rollbackFor = java.lang.Exception.class)
public int saveAssignedFA(final String[] CVListCode, final int userCodeFA, final String randomNoColumn, final String[] tourFrom, final String[] tourTo) {
return assignFADaoInterface.saveAssignedFA(CVListCode,userCodeFA,randomNoColumn,tourFrom,tourTo);
}
我的 DAO 实现是
@Repository("assignFADao")
public class AssignFADao implements AssignFADaoInterface{
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public int saveAssignedFA(final String[] CVListCode, final int userCodeFA, final String randomNoColumn, final String[] tourFrom, final String[] tourTo) {
int successCV[];
int successSV[];
int flag = 0;
String sqlUpdateCV = "";
String sqlUpdateSV = "";
try {
sqlUpdateCV = "UPDATE cce_cropvillagelist SET usercodefa=? WHERE cvlistcode=?";
sqlUpdateSV = "UPDATE cce_samplevillages SET randomnocolumn=?,tourfrom=?,tourto=?,levelreached='FA',statusofdocument='F' WHERE cvlistcode=?";
successCV = jdbcTemplate.batchUpdate(sqlUpdateCV, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, userCodeFA);
ps.setInt(2, Integer.parseInt(CVListCode[i]));
}
@Override
public int getBatchSize() {
return CVListCode.length;
}
});
int a=Integer.valueOf("bvxv");
if (successCV.length > 0) {
flag = 1;
successSV = jdbcTemplate.batchUpdate(sqlUpdateSV, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
if (!tourFrom[i].trim().equals("-")) {
ps.setString(1, randomNoColumn);
ps.setDate(2, tourFrom[i].length()==0?null:new java.sql.Date(DateAndTime.convertStringToDate(tourFrom[i]).getTime()));
ps.setDate(3, tourTo[i].length()==0?null:new java.sql.Date(DateAndTime.convertStringToDate(tourTo[i]).getTime()));
ps.setInt(4, Integer.parseInt(CVListCode[i]));
}
}
@Override
public int getBatchSize() {
return CVListCode.length;
}
});
if (flag == 1) {
System.out.println("FLAG"+flag);
}
}
} catch (NumberFormatException | DataAccessException ex) {
System.out.println("Exception in AssignFADao.saveAssignedFA(final int[] CVListCode, final int userCodeFA,final String randomNoColumn,final Date[] tourFrom,final Date[] tourTo) : " + ex);
} finally {
}
return flag;
}
请帮忙。首先,当我尝试使用 @Transactional
时,项目没有运行,然后请求 aopalliance jar。添加该 jar 后,项目正在运行但不会发生回滚。
最佳答案
当你使用
@Transactional(rollbackFor = java.lang.Exception.class)
你告诉 Spring 在抛出异常时回滚事务,但你正在捕获它们
catch (NumberFormatException | DataAccessException ex) {
System.out.println("Exception in AssignFADao.saveAssignedFA(final int[] CVListCode, final int userCodeFA,final String randomNoColumn,final Date[] tourFrom,final Date[] tourTo) : " + ex);
}
所以 Spring 永远不会注意到异常被抛出。您可以删除 try/catch block ,也可以在 try/catch block 内再次抛出异常
catch (NumberFormatException | DataAccessException ex) {
System.out.println("Exception in AssignFADao.saveAssignedFA(final int[] CVListCode, final int userCodeFA,final String randomNoColumn,final Date[] tourFrom,final Date[] tourTo) : " + ex);
throw ex;
}
更新
我认为您的配置文件中缺少注释驱动的标记。
<tx:annotation-driven proxy-target-class="true"
transaction-manager="transactionManager" />
在这篇文章中有一个完整的例子来说明你在做什么。
http://www.journaldev.com/2603/spring-transaction-management-example-with-jdbc
关于java - Spring jdbcTemplate @transactional 不回滚 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039545/
应用程序上下文中的一些bean的依赖关系形成一个循环:当我使用时@Autowired私有(private) JdbcTemplate jdbcTemplate;不同类(class) 错误提示: ***
我做一个查询: jdbcTemplate.query(sqlQueryForGetNodes, new Object[]{treeId, versionId}, rs -> { NodeTy
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
根据 Spring documentation ,Spring JdbcTemplate的使用步骤如下:
我做了这个简单的应用程序来连接到 MySQL 数据库,我收到了这个错误: org.springframework.jdbc.core.JdbcTemplate 在我的配置中 (com.kubamadr
我遵循了SpringBoot框架中的示例,该框架从这里开始,当我尝试添加Spring Bean时得到下一个错误。Pom.xml。我尝试插入到BD中,BD没有改变,应用程序本身可以工作,但没有连接数据库
我遵循了SpringBoot框架中的示例,该框架从这里开始,当我尝试添加Spring Bean时得到下一个错误。Pom.xml。我尝试插入到BD中,BD没有改变,应用程序本身可以工作,但没有连接数据库
我正在学习 Spring Boot 和 jdbcTemplate 的组合以进行一些基本的 crud 操作,并试图更好地理解我应该选择哪种更新方法。 我理解以下两种类方法(改编自 this post)将
如何使用行映射器向表中插入数据? 我正在尝试: Employee user1 = jtemplate.queryForObject("INSERT INTO employee(id, name,sal
我最近切换到 Spring Framework 而不是手动处理 JDBC,这主要是一个很好的过渡。但是,一个程序开始出现奇怪的问题:如果数据库速度很慢,则在调用 getJdbcTemplate().u
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调
我有一个 spring 应用程序,它的主页会触发多个 ajax 调用,这些调用又从数据库中获取数据并返回。数据库已配置连接池,minPoolSize 为 50,maxPoolSize 为 100。 现
有人可以指出我以下 Spring Jdbc 模板代码中的任何错误吗? 当我点击删除时,记录没有被删除,也没有显示错误。 public void delete(String id) { logg
我正在使用 spring JDBCTemplate。 我有一个场景,其中需要传递到查询函数中的参数是条件/可选的。例如,我有以下代码: List result = jdbcTemplate.query
在项目中我在Hibernate和Spring jdbctemplate中是混合使用的。我添加了乐观锁定。 Hibernate 非常适合版本控制,但现在我必须转换所有这些 jdbctemplate 代码
我已经为我的INSERT查询建立了一个DAO。码: DAO public class EmployeeDao { JdbcTemplate template; public void
我有一个sql查询。 String sql = "SELECT ? FROM Users WHERE Lastname=?"; 我使用 JDBCTemplate 中的 queryForList 方法
我正在尝试将嵌套查询与 JdbcTemplate 一起使用,但发现了问题,在我看来,它不支持嵌套查询..我是对的吗?或者我需要改变什么? 所以,我调用 getJdbcTemplate().query
这个问题是几年前提出的,但答案对我来说不起作用。我已将建议的注释添加到配置和 dao 中。我确信模板实际上正在连接到数据库,因为当我的列太小时,我收到了适当的错误。更新调用正在执行单行插入,并且毫无异
JdbcTemplate 对象和 SimpleJdbcTemplate 之间有什么区别? 最佳答案 截至Spring 3.1 SimpleJdbcTemplate已弃用,SimpleJdbcTempl
我是一名优秀的程序员,十分优秀!