java 手动事务_从Java手动使用@Transactional方法创建Spring @Se...

这篇博客探讨了如何在Spring应用中实现多租户架构,并手动进行事务管理。作者希望能够在不修改XML配置或使用特定持久性单元的情况下,通过Java代码动态创建基于不同数据库URL的服务实例。目前,他们已经能够实现基于自定义jdbcTemplate的逻辑和JDBC事务,但寻求一种更灵活的方式,尤其是在事务处理方面,以确保在异常情况下能正确提交或回滚事务。
摘要由CSDN通过智能技术生成

假设有@Service和@Repository接口,如下所示:

@Repository

public interface OrderDao extends JpaRepository {

}

public interface OrderService {

void saveOrder(Order order);

}

@Service

public class OrderServiceImpl implements OrderService {

@Autowired

private OrderDao orderDao;

@Override

@Transactional

public void saveOrder(Order order) {

orderDao.save(order);

}

}

这是工作应用程序的一部分,所有内容都配置为访问单个数据库,并且一切正常.

现在,我想有可能使用纯Java和Java代码中指定的jdbcUrl创建具有自动连接的OrderDao的OrderService的独立工作实例,如下所示:

final int tenantId = 3578;

final String jdbcUrl = "jdbc:mysql://localhost:3306/database_" + tenantId;

OrderService orderService = someMethodWithSpringMagic(appContext, jdbcUrl);

如您所见,我想向现有的基于Spring的应用程序引入多租户架构,其中每个数据库的租户策略.

请注意,在使用自我实现的类似jdbcTemplate的逻辑以及JDBC事务正确运行之前,我能够非常轻松地实现这一目标,因此这是非常有效的任务.

还请注意,我需要非常简单的事务逻辑来启动事务,在该事务范围内的服务方法中执行多个请求,然后在发生异常时提交/回滚.

Web上有关Spring多租户的大多数解决方案都建议使用基于注释的配置在xml config AND / OR中指定具体的持久性单元,这是非常不灵活的,因为要添加新的数据库url,应停止整个应用程序,而xml config / annotation代码应该更改并启动应用程序.

因此,基本上,我正在寻找一段能够创建@Service的代码,就像Spring在从XML配置/注解中读取属性之后在内部创建@Service一样.我也正在考虑使用ProxyBeanFactory,因为Spring使用AOP创建服务实例(因此,我想简单的旧的可重用OOP并不是这里的方法).

Spring是否足够灵活以允许这种相对简单的代码重用情况?

任何提示将不胜感激,如果我找到这个问题的完整答案,我会在这里张贴给后代:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值