带着做计算机项目的网站,只选设计师的网站,服务器选择,网站服务器空间租用本来好好的项目启动突然报了一个异常#xff1a;
PostgreSQL报错问题如何解决【ERROR: relation does not exist】项目中使用了两个数据源#xff0c;一个是 postgresql#xff0c;一个是 mysql#xff0c;报错的表是在 mysql#xff0c;但是明明没改过代码…本来好好的项目启动突然报了一个异常
PostgreSQL报错问题如何解决【ERROR: relation does not exist】项目中使用了两个数据源一个是 postgresql一个是 mysql报错的表是在 mysql但是明明没改过代码而且对应的实体类也注解了 DS(“slave”)slave对应着mysql。怎么怎么跑到 postgresql 去找这个表了呢
首先代码是这样的一个方法A中线调用一个方法B方法B使用了 postgresql 数据源接着该方法调用另外一个方法C 注解了 DS(“slave”) 方法C使用了 mysql 数据源这个方法A本来运行得好好的只因为我在方法A加了一个 事务注解 Transactional 就报错了。
原因是 Transactional 默认是外层开启一个事务然后默认传播给内部调用的方法如果内部方法没指定事务类型的话但是这个是仅限于同一个数据源上面已经是两个数据源会导致切换数据源失败。 解决办法是在上面使用了 DS(“slave”) 注解的方法上加上以下的事务配置
Transactional(propagation Propagation.REQUIRES_NEW, rollbackFor Exception.class)事务类型 REQUIRES_NEW新建事务如果当前存在事务把当前事务挂起。所以不会受方法A注解的事务影响。
以下是 spring 事务的七种传播行为
REQUIRED支持当前事务如果当前没有事务就新建一个事务。这是最常见的选择。
SUPPORTS支持当前事务如果当前没有事务就以非事务方式执行。
MANDATORY支持当前事务如果当前没有事务就抛出异常。
REQUIRES_NEW新建事务如果当前存在事务把当前事务挂起。
NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起。
NEVER以非事务方式执行如果当前存在事务则抛出异常。
NESTED支持当前事务如果当前事务存在则执行一个嵌套事务如果当前没有事务就新建一个事务。