「java事务开启关闭」spring关闭事务

博主:adminadmin 2022-11-29 04:02:07 61

今天给各位分享java事务开启关闭的知识,其中也会对spring关闭事务进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何手动控制java中的事务

很简单,直接将autoCommit设置为false,就可以自己控制事务的提交和回滚!

大概是:conn.setAutoCommit(false);这个方法,然后开启事务是:conn.beginTrainsaction();方法如有不准确,希望海涵!

jdbc mybatis hibernate 怎么开启关闭事务

JDBC使用Connection控制事务,它有如下方法:

setAutoCommit(false):开启事务,

commit:提交事务

rollback:回滚事务

--------------------------手动分割线------------------------

MyBatis使用SqlSession控制事务,它提供如下方法

commit:提交事务

rollback:回滚事务

--------------------------手动分割线------------------------

Hibernate使用Tranaction控制事务,提供如下方法

commit:提交事务

rollback:回滚事务

它调用Session的beginTransaction()方法开始事务

但实际开发时都使用Spring 声明式事务来做事务管理,其实这些内容建议你还是要系统学习一下,可以照着“轻量级java web企业应用实战”这本书学习,内容很详细、具体

java中的事务

如果你用Spring框架,Spring中可以实现事务管理,在spring 配置文件中配置事务管理器,也可以使用Spring注解式事务,在方法上加上@Transactional注解。

@Transactional

public void save() {

//你的代码逻辑

}

如果没有使用Spring框架,可以用JDBC处理事务,如下:

try{

con.setAutoCommit(false);//开启事务 ......

con.commit();//try的最后提交事务

} catch() {

con.rollback();//回滚事务

}

java 事务

Java中的事务处理

一般情况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务、容器管理事务。一般情况下,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面我们列举两种事务处理方式。

1、JavaBean中使用JDBC方式进行事务处理

在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。

public int delete(int sID) {

dbc = new DataBaseConnection();

Connection con = dbc.getConnection();

try {

con.setAutoCommit(false);// 更改JDBC事务的默认提交方式

dbc.executeUpdate("delete from bylaw where ID=" + sID);

dbc.executeUpdate("delete from bylaw _content where ID=" + sID);

dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);

con.commit();//提交JDBC事务

con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式

dbc.close();

return 1;

}

catch (Exception exc) {

con.rollBack();//回滚JDBC事务

exc.printStackTrace();

dbc.close();

return -1;

}

}

2、SessionBean中的JTA事务

JTA 是事务服务的 J2EE 解决方案。本质上,它是描述事务接口(比如 UserTransaction 接口,开发人员直接使用该接口或者通过 J2EE 容器使用该接口来确保业务逻辑能够可靠地运行)的 J2EE 模型的一部分。JTA 具有的三个主要的接口分别是 UserTransaction 接口、TransactionManager 接口和 Transaction 接口。这些接口共享公共的事务操作,例如 commit() 和 rollback(), 但是也包含特殊的事务操作,例如 suspend(),resume() 和 enlist(),它们只出现在特定的接口上,以便在实现中允许一定程度的访问控制。例如,UserTransaction 能够执行事务划分和基本的事务操作,而 TransactionManager 能够执行上下文管理。

应用程序可以调用UserTransaction.begin()方法开始一个事务,该事务与应用程序正在其中运行的当前线程相关联。底层的事务管理器实际处理线程与事务之间的关联。UserTransaction.commit()方法终止与当前线程关联的事务。UserTransaction.rollback()方法将放弃与当前线程关联的当前事务。

public int delete(int sID) {

DataBaseConnection dbc = null;

dbc = new DataBaseConnection();

dbc.getConnection();

UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务

try {

transaction.begin(); //开始JTA事务

dbc.executeUpdate("delete from bylaw where ID=" + sID);

dbc.executeUpdate("delete from bylaw _content where ID=" + sID);

dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);

transaction.commit(); //提交JTA事务

dbc.close();

return 1;

}

catch (Exception exc) {

try {

transaction.rollback();//JTA事务回滚

}

catch (Exception ex) {

//JTA事务回滚出错处理

ex.printStackTrace();

}

exc.printStackTrace();

dbc.close();

return -1;

}

}

事务是什么?在java中如何手工执行事务

事务 指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性;

在java中你要手工执行事务,如果是jdbc连接数据库,那么就设置提交的时候手动提交

conn.setAutoCommit(false);//conn 是connection对象

当结束后

conn.commit();

希望对你有帮助

如何用java开启mysql事务,要求详细

如何用java开启mysql事务,要求详细

看你是什么事务,jdbc事务,还是分布式事务,还是容器事务

1,编程式事务管理(jdbc的事务是绑定在connection上的)

Connection conn = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");

conn.setAutoCommit(false); //取消自动提交

PreparedStatement ps = conn.prepareCall("update something");

ResultSet rs = ps.executeQuery();

conn.commit(); //手动提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,声明式事务

先在工程的application.xml配置文件中添加如下代码,开启事务

!-- 声明式事务控制配置 --

tx:annotation-driven transaction-manager="txManager"/

bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="datasource" ref="bassDataSource"/property

/bean

然后在你需要开启事务的接口前面添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以再类里和方法里面添加事务注解0~0");

throw new IOException();

}

直接调用接口方法就好

分布式事务处理(mysql貌似在5.X之后才支持) 的话,

1.可以直接使用spring+atomikos框架进行管理

参考:

就不贴测试代码了,自己看着配置吧

2,使用JTA(Java Transaction API)进行分布式事务管理(测试代码如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事务处理

public class transferAccount

{

@SuppressWarnings("null")

public void testTransferAccount()

{

UserTransaction userts = null;

Connection connA = null;

PreparedStatement psA = null;

InitialContext context = null;

Connection connB = null;

PreparedStatement psB = null;

try

{

//获得事务管理对象

userts = (UserTransaction) context.lookup("java:comp/UserTransaction");

//获取两个数据库

connA = getDataSourceA().getConnection();

connB = getDataSourceB().getConnection();

//开启事务

userts.begin();

//sql语句

psA = connA.prepareStatement("我加1");

psB = connB.prepareStatement("我减1");

//执行sql

psA.executeUpdate();

psB.executeUpdate();

//事务提交

userts.commit();

} catch (Exception e)

{

try

{

userts.rollback();

} catch (IllegalStateException | SecurityException

| SystemException e1)

{

e1.printStackTrace();

}

e.printStackTrace();

}

finally

{

try

{

psA.close();

psB.close();

connA.close();

connB.close();

} catch (SQLException e)

{

e.printStackTrace();

}

}

}

public DataSource getDataSourceA()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1433);

dataSource.setUser("test");

dataSource.setPassword("test");

return dataSource;

}

public DataSource getDataSourceB()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1435);

dataSource.setUser("test1");

dataSource.setPassword("test1");

return dataSource;

}

}

java事务开启关闭的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于spring关闭事务、java事务开启关闭的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。