SH框架下service加入事物控制后,在service方法中开启线程,run方法会加入事物中吗?

下面是applicationContext.xml的配置文件:

 <!-- Bean代理事务 -->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
            <list>  
                <value>*Dao</value>
                <value>*Service</value>
                <value>*ServiceImpl</value>
            </list>  
        </property>  
        <property name="interceptorNames">  
            <list>  
                <value>transactionInterceptor</value>  
            </list>
        </property>  
    </bean>

加入了事物控制的service方法:

 public void savePayMentBillCode(List<PaymentExt> paymentExtList) throws ServiceException {
        try {
            for(PaymentExt paymentExt:paymentExtList) {
                paymentExt.setDataStatus(BusinessConstant.ExternalDataStatus.SAVE);
                paymentExtDao.save(paymentExt);
            }
            //创建另一个线程去执行复杂的保存操作。
            new Thread(new PaymentThreadService(paymentExtList,paymentDataService)).start();
        } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getMessage());
            throw new ServiceException("保存报文信息异常!" + e.getMessage());
        }
    }

线程的run方法:

 public class PaymentThreadService extends AbstractService implements Runnable{


    private List<PaymentExt> paymentExtList;
    private PaymentDataService paymentDataService;

    public PaymentThreadService(){}

    public PaymentThreadService(List<PaymentExt> paymentExtList,PaymentDataService paymentDataService) {
        this.paymentExtList = paymentExtList;
        this.paymentDataService = paymentDataService;
    }

    @Override
    public void run() {
        try {
            for (PaymentExt paymentExt : paymentExtList) {
                paymentDataService.outerSetlBizType(paymentExt,null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getMessage());
            throw new ServiceException("多线程-保存报文信息异常!" + e.getMessage());
        }
    }
}
 paymentDataService.outerSetlBizType(paymentExt,null);

这段代码中有很多保存操作。

当run方法运行结束后,这些保存操作会被事物提交吗?我在测试时会出现:row was updated or deleted by another transaction (or unsaved-value mapping was incorrect);错误。

好像run方法结束会并没有把session自动结束,还管理着保存的对象,导致其他方法试图获取这些对象时出现上面的异常。

求教谢谢!

0

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ssh框架下的事物控制与匿名内部类
applicationContext.xml文件中事物控制的配置代码:rn[code=text]rn rn rn rn rn *Daorn *Servicern *ServiceImplrn rn rn rn rn transactionInterceptor rn rn rn rn rn rn rn rn rn rn PROPAGATION_REQUIREDrn PROPAGATION_REQUIRES_NEWrn rn rn rn[/code]rnrn这段代码的意思是:类名后缀为Dao,Service,ServiceImpl的类都会被加入事物控制中。rn*Daorn*Servicern*ServiceImplrnrnrn如果我在一个service类中添加一个匿名内部类,那么这个匿名内部类会不会被加入进事物控制中呢?rnrn代码:rn[code=java]rn@Service("paymentExtWebService")rnpublic class PaymentExtWebService extends AbstractService rn ...rn public void savePayMentBillCode(final List paymentExtList) throws ServiceException rn try rn for(PaymentExt paymentExt:paymentExtList) rn paymentExt.setDataStatus(BusinessConstant.ExternalDataStatus.SAVE);rn paymentExtDao.save(paymentExt);rn rn //创建另一个线程去执行复杂的保存操作。rn new Thread(new Runnable() rn public void run() rn try rn for (PaymentExt paymentExt : paymentExtList) rn paymentDataService.outerSetlBizType(paymentExt,null);rn rn catch (Exception e) rn e.printStackTrace();rn logger.info(e.getMessage());rn throw new ServiceException("多线程-保存报文信息异常!" + e.getMessage());rn rn rn ).start();rn catch (Exception e) rn e.printStackTrace();rn logger.info(e.getMessage());rn throw new ServiceException("保存报文信息异常!" + e.getMessage());rn rn rn ...rnrn[/code]rnrn通过build文件夹查询class文件可以看到匿名内部类的类名:PaymentExtWebService$1.classrnrn
Web Service 的事物处理
各位大哥大姐们,小弟最近做的程序要调用 Web Service ,并在 Service 里有事物的操作。在本机测试的时候是好用的,为什么一在 外网测试就不行呀??错误是 Exception from HRESULT: 0x8004D00E. 请问怎么解决呀??
解决service中事物提前关闭的问题
这个项目是一个框架阶段的总结项目。主要用到了Spring、SpringMVC、Hibernate三大框架搭建项目。同时使用了Shiro完成项目中的用户认证和用户权限处理。使用了quartz实现了定时任务。整合了druid的监控中心。使用aop开发了日志系统。前端框架使用vue实现。
service中加入其他的类?
我想做一个service,定时的作一个功能,现在不能在service中使用CTime,rn还有其它的方法获得系统的时间吗?要能得到今天是一个月的第几天,一个星期的第几天,才行的。rnservice中能用mfc的东西吗?rn能用对话框吗?rn谢谢。rn分不够再加。rn
线程run方法中注入service报空指针
  如果在run中注入pictureLibraryServiceImpl此时会报空指针异常,pictureLibraryServiceImpl为null如何解决,如下图 这样就解决了问题  
Spring中的事物控制
spring的事务控制是基于AOP的,它可以使用编程的方式实现,也可以使用配置的方式实现,自己重点总结下使用配置方式实现.在开发中,使用spring事务管理器的实现类,真正管理事务的对象org.springframework.jdbc.datasource.DataSourceTransactionManager使用Spring JDBC或iBatis 进行持久化数据时使用org.springfr...
spring service事物,service调用service,不回滚
如题,spring事物在service层,我在一个service层调用另一个service的方法,这样事物回滚就不管用了。请问这个问题怎么解决呢
spring在多个service中的方法不在同一个事物
问题:1、spring重启在启动阶段初始化两次 第一次通过web.xml配置以XmlWebApplicationContext为入口 第二次通过ClassPathXmlApplicationContext为入口 2、业务类SpringContextUtil在初始化时实现了ApplicationContextAware,spr
每日一得--spring事物service切面不使用事物注解
@Transactional(propagation = Propagation.NOT_SUPPORTED)
事物控制
@Autowired private DataSourceTransactionManager transactionManager; //事务控制 DefaultTransactionDefinition def = new DefaultTransactionDefinition(); // 事物隔离级别,开启新事务,这样会比较安全些。 def.setPropagationBehavior(...
EAS SERVER中事物控制
请哪位高手详细对JAGUAR CTS中组件事物控制部分进行说明,本人将不胜感激。切切切。。。。
不同Web Service怎么进行事物封装?
rn 比如很简单的一个例子:rn 我通过银行转帐来购买某公司的产品rn 我通过银行提供了一个转帐支付的WebService 的一个转帐的Mothed把Money转帐给了 销售公司,而家销售公司必须在接受到转帐的同时处理它的销售事物(通过此公司提供的Web Service中的一个MOTHED完成),这两个Mothed应该是事物的,但是如果我在转帐成功后调用销售公司的MOthED时却发生了错误而未交易成功,我怎么能够RollBack银行的转帐业务呢?rnrn 我觉得Web Service 构架对基于Internet的商业合作提供了一个很好的解决方案,但是数据的事物安全,应该是一个身实际的问题,想知道Web SerVice是怎么来解决不同SerVice的不同MOTHED中的事物呢!?rn
mysql_开启事物
事物并发问题开启事物:    start tansation ;    执行事物流程    savepoint --创建节点     执行事物流程    rollback to xx 回滚事物    commit; 提交事物;rollback to xx  -- 回滚事物到保存的节点位置,节点以下的代码将被撤销commit 执行事物--  提交事物,结束事物    ...
redis事物的开启和终止
import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class TranRedis { public static void main(String[] args) { Jedis js=new Jedis("localhost",6379); js.select(0);/
spring开启事物失败
hql语句能正常显示结果, 自己配置事物也能正常插入数据, 但是 spring 托管事物以后失败(数据插不进去,没提交...),我怀疑是配置文件没弄好.. 附下 本人配置事物方式..帮忙看下 哪里错误rn [code=html]rnrn rn rn rn rn rn[/code]rn插入的方法,没有程序没异常报出,但是 没数据插入rn[code=java]rn@Transactionalrn public Serializable save(T o) rn this.getCurrentSession().persist(o);rn return null;rn rn[/code]rn假如 我如下写法 是正确的,rn[code=java]rn@Test rn public void testSessionFactory() rn System.out.println(ctx.getBean("dataSource")); rn EntityManager entityManager = entityManagerFactory.createEntityManager();rn entityManager.getTransaction().begin(); rn Employee model = new Employee();rn model.setPassword("123456");rn model.setPhone("15029332");rn model.setUsername("ewwqeqweqwe");rn model.setName("d09dsa");rn entityManager.persist(model);rn entityManager.getTransaction().commit();rn rn rn[/code]rn 帮忙解答下, 就先贴这些,如果各位还要求我贴出哪个地方的代码,说下... 在线等
JDBC控制事物的基本操作 开启 结束 回滚
JDBC控制事务: 1. 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。 2. 操作: 1. 开启事务 2. 提交事务 3. 回滚事务 3. 使用Connection对象来管理事务 * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务 ...
winform 应用程序中加入web service(即web 服务)的方法?
C/S 结构中WinForm 应用程序能调用 Web Service,比如网站中提供的Web服务,rn能否反过来:rnWinForm 程序中包含Web 服务, 让Web网站系统能够调用这些WinForm 的Web服务?rnrn优点: 网站就可以向app 或winform 程序推送即时消息了.rn能否?rn
怎样在项目中开启JDBC事物控制
首先,先建一个datebase.properties文件,用于读取配置文件,里面装的代码如下: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8 user=root password=123456 smbms为mysql的数据库实例
如何将httpd加入service列表
我用命令chkconfig --add httpd将httpd加入service列表,但却提示没有这个chkconfig这个命令rn为什么啊?
关于spring事物控制加入try-catch后果的体会
    在项目中遇到了这样的问题,用户1上传知识文档,用户2、用户3等下载或者浏览对应知识文档,用户1增加相应积分,用户2、用户3扣除相应积分。    目前问题是,文档正常下载,但是没有增加对应的积分,具体原因参见代码:    1、事物控制通过注解,spring-context.xml文件&amp;lt;tx:annotation-driven transaction-manager=&quot;transacti...
在thread的run方法中加入synchronized(this)同步了什么?
class A extends Threadrnprivate String s ;rnrnpublic void run()rn String s1 = null;rnsynchronized(this)rn s1 = s ;rnrnSystem.out.println(s1);rnrnrnpublic synchronized void setS(String s) this.s = s;rnrnrn如上这段代码,每一个线程都有一个这个锁,那么synchronized(this)加锁的意义何在?rn锁住了哪些操作?
java线程中加入线程
加入线程  join()                join(int)  等待指定毫秒之后再继续。理解 :暂停当前执行的线程,开始执行当前加入的线程,完毕后继续执行暂停的线程。...
spring 事物效果 this引用进行调方法没有事物控制
先谈问题 我实际遇到的问题就是,我在一个service中,将此service的对象通过this传递给子线程,子线程通过传递过来的对象,调用对象里的方法,此时没有事物控制效果。 原因浅谈 首先要区分AOP代理对象 和 对象,AOP代理对象具有AOP的属性(在此处就是事物效果),对象则不具备。this 就是普通对象,所以不具备事物控制效果。 想更深的学习,自信看AOP的实现原理 解决办法 ...
SSH框架中事物的声明和配置事物的方法
一, 事物       事物实际上就是控制数据的安全访问,为了数据安全提出的,通常认为事物仅仅和数据库相关       事物的特性(事务必须服从ISO/IEC所制定的ACID原则):ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。      1.原子性:事物在执行过程中任何失败都将会导致事物所做的修...
测试Service中开启Thread
测试Service中开启线程修改Activity
Service service和线程的区别
  两种service启动方式(不懂自己看书去),startservice这种只能用onDestroy来终止,若不用onDestroy销毁,Activity一退出,service将会一直运行下去;bindservice只能用unbindservice解除绑定,用onDestroy来终止,如果不解除绑定的话也不用onDestroy销毁的话,Activity一退出,service也将结束。   ...
MySQL事物和事物回滚
什么是事物?     事物说白了就是一件事从开始发生到结束的整个过程。在MySQL里事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。 这样可以确保数据的一致性。rollback事物回滚,则事物执行失败,保证了数据安全。 事务和事务回滚的应用   mysql中默认sql语句会自动commit到数据库,在默认情况下MySQL开启的是autocommit模式,也就是隐含的将每条语句...
ssm框架下加入定时任务springtask
   在springMVC下加入: xmlns:task=&quot;http://www.springframework.org/schema/task&quot;  http://www.springframework.org/schema/task         http://www.springframework.org/schema/task/spring-task-3.0.xsd&quot;&amp;gt; &amp;lt...
事物
事物jdbc业务实现方式:1.将连接提交方式,改为手动提交  con.setAutoCommil(false)2.在执行完所有操作以后,再执行con.commit();将数据真正写入数据库。在catch块中,执行con.rollback,回滚事务,表示出现异常以后,该事物之前所有得更新操作全部失败,回到执行事物之前的状态...
线程中调用service方法出错
Thread中注入失败
Hibernate事物控制与管理
数据库事务必须具备ACID的特征(Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性)数据库操作过程中可能出现的3种不确定情况: 1. 脏读取(Dirty Reads):一个事务读取了另一个并行事务未提交的数据。 2. 不可重复读取(Non-repeatable Reads):一个事务再次读取之前的数据时,得到的数据不一...
事物控制回滚操作
事物回滚一般用Spring 的AOP特性。                   //拦截所有下列名称命名的方法名                                                                                                     
spring-控制事物回滚
NULL 博文链接:https://sunfish.iteye.com/blog/1534890
spring 控制事物
1.通过在编码中控制事物   springContext.xml:  ...   &amp;lt;bean id=&quot;teamDaoImpl&quot; class=&quot;com.dao.ObjDaoImpl&quot;&amp;gt;  &amp;lt;property name=&quot;jdbcTemplate&quot; ref=&quot;jdbcTemplate&quot;&amp;gt;&amp;lt;/property&amp;gt;  &amp;lt;property
如何控制触发器的事物?
我用的是sql server 2005数据库,在表account中,创建了两个INSERT触发器(tr_add_account,tr_add_userinfo):rntr_add_userinfo又向另外一个表userinfo中插入了数据,结果又触发了userinfo这个的触发器tr_add_user,但是tr_add_user触发器中,又要使用account这个表的account_name字段,由于account的两个INSERT触发器根本没有提交数据,导致在tr_add_user中取不到account_name的值。rnrn请问如何去处理?能不能先让account的两个触发先提交数据,然后表userinfo的触发器tr_add_user就可以取到account_name的值了。
Spring 事物控制 问题
前提: service类有事物控制 普通类(A)没有事物控制rnrnpublic A ()rn tryrn Bservice(); // REQUIREDrn cathc(RunTimeException e)rnrnrnrn这种处理是否正确? 事务是否会回滚?
事物—事物四大特性
事物(一)——事物四大特性原子性(Atomicity)原子性是事物最小的单元,是不可再分的,对一个数据库小的操作。这些必须同时完成,如果有一个失败了。则一切的操作都全部失败。比如A给B转账,A是一个操作,B也是一个操作。A转账失败,则B接帐也失败一致性(Consistency)指在数据库操作前后是完全一致的。这个一致可以理解为对数据库操作的有效性。如果事物正常操作则系统会维持有效性,如果事物操作失败
PDO中事物详解
PDO中事物与其他编程语言类似,采用开始事物,提交事物,回滚的流程模式,但是在使用mysql作为插入或者修改的数据库时需要注意,需要将MySQL中的表的引擎设置为Innodb模式,MySQL中表有两种模式,一种是myisam模式,一种是Innodb模式。简单地说,前者不支持事物,后者支持事物。所以在PDO的事务处理中,前者类型的表不支持事务,即便在代码中写了相应的事务处理代码。所以需要对表引擎设置
Oracle中的事物
1. 起始标志:事物中的第一条DML语句2. 结束标志: 显式提交commit 隐式提交 DDL,DCLeg:insert     update     create table = 创建表 + commit      这也就解释了为什么DDL不能回滚 显示回滚:rollback 隐式回滚:非正常退出 掉线,宕机。。。。 Oracle中事物的保存点 savepoint a 开启一个保存点 rol
hive中的事物操作
背景    hive中默认是不支持事物的,Hive的常见也一般都是一次写入,频繁读取。加入事物之后,支持update、insert、delete操作保存的文件格式必须为crc格式file需要修改配置文件开启事物表必须分桶    找到hive目录下conf文件夹中的hive-site.xml文件,需要修改的项和它对应的value值:These configuration parameters mus...