我在写入器上使用了一个spring batch重试。作者看起来像这样:
public class MyWriter implements ItemWriter<MyClass> {
@Retryable(maxAttempts=3, backoff=@Backoff(delay=2000))
public void write(List<? extends MyClass> list) throws Exception {
// db operation 1 -- insert query
// some business logic
设置:
Tabe:CREATE TABLE test (id int PRIMARY KEY NOT NULL, name varchar(25));
基本测试流程:
Preconditions:数据库已经有了id=2的记录(强制SqlException)
案例1:
当按原样调用基本流时,第二个insert由于主键冲突而失败,第一个insert将被回滚。似乎是一种合理的违约行为。
案例2:
通过添加回滚异常策略修改基本流,并在异常策略中添加一个记录器,以便在调用时打印某些内容。
当调用flow时,第二个insert由于主键冲突而失败,第一个insert将被回滚,但是 Rollback
我工作的公司专门为所有数据库交互、选择、更新、删除使用存储过程(和一个本地的ORM)。
我们有许多procs将从表中插入和/或更新和/或删除。
当需要对整个proc进行“事务化”时,显然需要有我们的commit和rollback语句。
问题从何而来。
当一个事务中有多个语句需要一起提交或回滚时,我们显然会抛出一个try/catch块。
让我们假设脚本的这个示例场景:
set nocount on
create table #test
(
id int primary key identity(1,1),
col varchar(2) not null,
y int n
我的应用程序在Spring 4.2和postgres数据库上。在我的应用程序中,我们使用了一个API,它是使用spring编写的,它有自己的数据库(mysql)。
@Transaction(rollbackfor = Exception.class)
updateOrder(Order order) {
// This insert is part of my application
update(order); //**STEP - 1**
//This is not part of our application &
// happening in
我看过JOOQ 部分
它使用jooq事务api启动事务,
create.transaction(configuration -> {
// Wrap configuration in a new DSLContext:
DSL.using(configuration).insertInto(...);
DSL.using(configuration).insertInto(...);
// Or, reuse the new DSLContext within the transaction scope:
DSLContext ctx
假设一个表具有一个验证触发器,该触发器强制执行某些业务逻辑:
TRG_MYTABLE_INSERT_UPDATE_VALIDATION
FOR INSERT, UPDATE on MYTABLE
以及将所有插入和更新写入另一个表的审计触发器。
TRG_MYTABLE_INSERT_UPDATE_AUDIT
FOR INSERT, UPDATE on MYTABLE
而且不能保证它们将按照特定的顺序执行,验证中的回滚会触发回滚对审计表的写吗?
是否所有触发器都在同一个事务中“幕后”登记?
我有一个下面的场景,我想要了解Spring中的嵌套事务处理以及传播。实际上,我读了很多关于这方面的内容,但对一些事实仍然不清楚。
public class ServiceImpl {
@Autowired
public AnotherService anotherService;
@Transactional // by default it is PROPOGATION_REQUIRED
public void insert (){
anotherService.anotherInsert();
}
}
public class AnotherServiceImpl {
@T
据我所知,如果我们以begin tran/ commit tran开始语句,它将完全完成或什么也不做。但是当我执行下面的TSQL代码时,它会更新第一个表n的记录,不做任何事情,也不提交或回滚。我也尝试过if @@error<> 0,但它也不是working..Please来帮我。
BEGIN TRAN
UPDATE A SET NAME ='ABC' WHERE ID=2
INSERT INTO TTT VALUES('GJ')
COMMIT TRAN
TABLE TTT DOES NOT EXIST.
我使用这个表在这段代码中抛出了一个错误
当我们有2个或更多的提交时,回滚的行为是什么?
Connection conn= getConnection();
try{
doSomeInsertOrUpdateStep1(conn); //some sql update/insert using connection
conn.commit(); //step 1
doSomeInsertOrUpdateStep2(conn); //some sql update/insert using connection
conn.commit(); //step 2
//ERROR IS THROWN HERE AFTER SECOND
我使用mongodb with spring mvc作为REST API。我有一个为事件添加注释的控制器。这个控制器使用我的事件服务的一个方法。它们的实现如下所示。然而,在我看来,我的mongodb连接在没有transaction的情况下可以工作。我有1 insert和1 update在我的控制器中添加注释。如果更新事件抛出错误,请求提交inserting.Why它不是在做回滚吗?我如何解决这个问题?
public Comments addComment(Comments comment) throws Exception{
comment.setCommentDate(SowUtil
我正在做一个ETL项目,积极地用数据填充表。有时,如果丢失了某些内容,则必须撤消整个数据块的修改,因此我使用事务。当出现错误时,应用回滚,如果没有,更新统计信息可能有助于提高效率。 所以我的问题是,在事务内更新统计信息还是在提交之后更新统计信息,哪个更有效率? 目前工作正常,如: BEGIN TRY
BEGIN TRAN
UPDATE stuffs SET ...
INSERT things VALUES(...
UPDATE STATISTICS stuffs
UPDATE STATISTICS things
END TRY
BEGIN CATCH
我有一个Spring管理的服务方法来管理数据库插入。它包含多个insert语句。
@Transactional
public void insertObservation(ObservationWithData ob) throws SQLException
{
observationDao.insertObservation(ob.getObservation());
// aop pointcut inserted here in unit test
dataDao.insertData(ob.getData());
}
我有两个单元测试,它们在调
我快速浏览了MySQL手册,但没有找到关于我的问题的确切信息。这是我的问题:如果我有一个InnoDB表A,它有两个触发器,分别由'AFTER INSERT ON A‘和'AFTER UPDATE ON A’触发。更具体地说,例如:一个触发器被定义为:
CREATE TRIGGER test_trigger AFTER INSERT ON A
FOR EACH ROW
BEGIN
INSERT INTO B SELECT * FROM A WHERE A.col1 =
JPA查询javadoc (参见说
int executeUpdate() Execute an update or delete statement.
Returns: the number of entities updated or deleted
Throws:
IllegalStateException - if called for a Java Persistence query language SELECT statement or for a criteria query
TransactionRequiredException - if there is no t
回滚时发生错误:
Msg 6401,16级,状态1,过程our_trigger,第76行
无法回滚t1。没有找到该名称的事务处理或保存点。
下面是触发器中的SQL代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [DOCSADM].[our_trigger]
ON [DOCSADM].[PROFILE]
FOR UPDATE, INSERT
AS
DECLARE @DocSystemId AS INTEGER
DECLARE @docNumber AS INTEGER
DECLA
我有一个简单的独立应用程序来测试Spring的事务管理。拥有Oracle Express Edition。运行以下命令以启用XA
grant select on sys.dba_pending_transactions to user_test;
grant select on sys.pending_trans$ to user_test;
grant select on sys.dba_2pc_pending to user_test;
grant execute on sys.dbms_system to user_test;
我的Java代码大致如下所示:
public class D
使用以下触发器时会出现错误:
create or replace trigger t1
after insert or update
on student_tbl
declare
pragma autonomous_transaction;
begin
if inserting then
insert into stud_fees_details(stud_id,fees_balance,total_fees)
select stud_id,course_fees,course_fees from student_tbl s,co
我正在使用原始SQL并尝试在同一个表上执行更新和插入操作,您认为我需要某种类型的事务吗?
如果我在同一个脚本文件中添加了一个INSERT,然后添加了一个UPDATE,那么执行的顺序会被SQL尊重吗?
到目前为止,结果是:
IF NOT EXISTS (SELECT TOP 1 * FROM dbo.Settings
WHERE Descr = 'GL for Credit Memos')
BEGIN
SET IDENTITY_INSERT dbo.Settings ON
DECLARE @newOrderNo INT;
我有两张桌子。Mysql 5.7,表中有Innodb存储引擎。
create table test_tran (id integer, descr varchar(255));
create table test_enum (id int, flag enum('good','not good') not null);
一个有效的记录插入到test_enum表中
insert into test_enum values(1,'good')
我使用已定义事务的存储过程来尝试更新枚举列中的无效值。它还捕获错误以回滚事务,然后重发错误。
SET sq