Ответ 1
это может быть полезно (http://forum.springsource.org/showthread.php?58337-No-transaction-in-transactional-service-called-from-PostConstruct):
В @PostConstruct (как и с afterPropertiesSet из интерфейса InitializingBean) нет способа гарантировать, что все почтовые обработки уже выполнены, поэтому (действительно) транзакций не может быть. Единственный способ убедиться, что это работает, - это использовать TransactionTemplate.
Итак, если вы хотите, чтобы что-то в вашем @PostConstruct
выполнялось в транзакции, вы должны сделать что-то вроде этого:
@Service("something")
public class Something {
@Autowired
@Qualifier("transactionManager")
protected PlatformTransactionManager txManager;
@PostConstruct
private void init(){
TransactionTemplate tmpl = new TransactionTemplate(txManager);
tmpl.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
//PUT YOUR CALL TO SERVICE HERE
}
});
}
}