请参阅代码。
>
当我调用方法@Async loadMarkUpPCT()时,数据没有提交到表中。它表现得好像是非牵引的。
当我从loadMarkUpPCT(类1)中删除@Async(即非异步)时,数据被提交并按预期正常:事务性)
我希望@Async和@Transactional的结果是一样的,但事实并非如此。请解释一下,我做错了什么?
编辑:我刚编辑过代码日志
流程方面:AppDataLoaderController调用AppDataLoaderService调用DataMigrationService调用JPadatMigrationDao
package concepts.web.rest.resource.spring.impl;
@Controller
@RequestMapping("/appdataloader")
public class AppDataLoaderController {
@RequestMapping("/loadMarkupPct")
@ResponseStatus(HttpStatus.ACCEPTED)
public void loadMarkUpPCT() {
try {
this.appDataLoaderService.loadMarkUpPCT();
} catch (ServiceException e) {
e.printStackTrace();
}
}
package concepts.service.impl;
@Service("appDataLoaderService")
public class AppDataLoaderServiceImpl implements AppDataLoaderService {
@Async
@Override
public void loadMarkUpPCT() throws ServiceException {
logger.debug("@Async loadMarkUpPCT");
dataMigrationService.loadMarkUpPCT();
}
package concepts.service.impl;
@Service
@Scope("prototype")
public class DataMigrationServiceImpl implements DataMigrationService {
@Override
public void loadMarkUpPCT() throws ServiceException {
// TODO Auto-generated method stub
Assert.notNull(markUpPCTDataLoader);
List<MarkUpPCT> markUpPCTs=markUpPCTDataLoader.getMarkupCoef();
for (MarkUpPCT markUpPCT: markUpPCTs)
dataMigrationDao.storeMarkUpPCT(markUpPCT);
}
package concepts.persistence.impl.jpa;
@Repository
public class JpaDataMigrationDao extends DataMigrationDaoAdapter{
@PersistenceContext
private EntityManager entityManager;
@Transactional
@Override
public void storeMarkUpPCT(MarkUpPCT markUpPCT) {
entityManager.persist(markUpPCT);
}
一些原木
14 Nov 2013 18:47:05,531 36813 [http-bio-18080-exec-3] DEBUG OpenEntityManagerInViewFilter - Opening JPA EntityManager in OpenEntityManagerInViewFilter
14 Nov 2013 18:47:05,578 36860 [http-bio-18080-exec-3] DEBUG DispatcherServlet - DispatcherServlet with name 'mvc' processing POST request for [/POCQI/appdataloader/loadMarkupPct]
[http-bio-18080-exec-3] DEBUG RequestMappingHandlerMapping - Looking up handler method for path /appdataloader/loadMarkupPct
[http-bio-18080-exec-3] DEBUG RequestMappingHandlerMapping - Returning handler method [public void concepts.web.rest.resource.spring.impl.AppDataLoaderController.loadMarkUpPCT()]
[SimpleAsyncTaskExecutor-1] DEBUG DataMigrationServiceImpl - @Async loadMarkUpPCT
[http-bio-18080-exec-3] DEBUG DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'mvc': assuming HandlerAdapter completed request handling
[SimpleAsyncTaskExecutor-1] DEBUG MarkUpPCTDataLoader - {80=1.6, 90=1.8, 100=2.0, 105=2.05, 110=2.1, 115=2.15, 117=2.17, 120=2.2, 125=2.25, 150=2.5}
[http-bio-18080-exec-3] DEBUG DispatcherServlet - Successfully completed request
[http-bio-18080-exec-3] DEBUG OpenEntityManagerInViewFilter - Closing JPA EntityManager in OpenEntityManagerInViewFilter
[http-bio-18080-exec-3] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Opening JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Registering transaction synchronization for JPA EntityManager
[SimpleAsyncTaskExecutor-1] DEBUG EntityManagerFactoryUtils - Closing JPA EntityManager
我只是碰到了同样的问题。原来我忘了添加@EnableAsync注释。
尝试用@Transactional
注释loadMarkUpPCT()
方法,并告诉我们这是否有效。
这个练习直接来自SCJP,由凯西·塞拉和伯特·贝茨完成 同步代码块 在这个练习中,我们将尝试同步一个代码块。在该代码块中,我们将获得对象的锁,以便其他线程在代码块执行时无法修改它。我们将创建三个线程,它们都将尝试操作同一对象。每个线程将输出一个字母100次,然后将该字母递增一次。我们将使用的对象是StringBuffer。 我们可以在一个String对象上进行同步,但是字符串一旦创建就不能被修改,
我试图通过在一个事务中运行多个save方法来原子化地保存许多实体,因此如果其中任何一个方法失败,所有这些方法都将被丢弃(回滚)。我尝试了很多方法,但似乎没有什么效果: BookingResource。java: ReservationRepository。java: Reservation.java: stacktrace是: 那么,这里发生了什么?我如何解决它?我试图公开这些方法,更改事务策略,
问题内容: 我正在使用同时使用JMS和Hibernate的独立应用程序。 该文档建议,如果我想同时使用这两种资源进行事务处理,则必须使用JTA。 但是,现在使用带有@Transaction注释的DAO方法(和HibernateTransactionManager),这似乎已经可以工作。当我在JmsTemplate上调用send()时,消息不会立即发送,而是随着方法的返回,使用Hibernate会话
嗨,我正在尝试开发带有事务的spring和hibernate应用程序,我正在使用Spring4。x和hibernate 4。下面是我的代码片段 应用程序上下文。xml servlet上下文。xml 坚持。xml finnaly meservice看起来像这样 和 这里会发生运行时异常,但db记录没有回滚。
使用log4j2,我很难让同步记录器和异步记录器一起工作。 从这里以Apache文档(标题为混合同步和异步记录器)为例,运行下面的应用程序将简单地创建日志文件,但不向其写入任何内容。我也不确定添加两个记录器指向同一个appender,但它的Apache留档,所以我假设这是好的。 LOG4J2配置 pom.xml 应用 但是,如果我更改log4j2配置并修改loggers元素以读取以下内容,我将在日
我是一个新的Spring和学习的事务概念。无法使@Transactional工作。 用例: 当getEmployee()抛出RuntimeException时,员工和员工详细信息的数据插入应该回滚。但回滚没有发生。我使用的是Oracle数据库11g和spring 4.3.1版本。下面是正在运行的独立java代码。