- I have searched the issues of this repository and believe that this is not a duplicate.
Ⅰ.java.lang.NullPointerException: null
private static DataSource dataSource;
private static TransactionTemplate transactionTemplate; 断点这两个属性都是为null
Ⅱ. Describe what happened
If there is an exception, please attach the exception trace:
Just paste your stack trace here!
Ⅲ. Describe what you expected to happen
Ⅳ. How to reproduce it (as minimally and precisely as possible)
- xxx
- xxx
- xxx
Minimal yet complete reproducer code (or URL to code):
Ⅴ. Anything else we need to know?
Ⅵ. Environment:
- JDK version(e.g.
java -version
): - Seata client/server version:
- Database version:
- OS(e.g.
uname -a
): - Others:
9条答案
按热度按时间rhfm7lfc1#
environment信息补充一下?
另外,不使用TCCfence的时候没问题吗?
ct2axkht2#
tcc不支持多数据源
xdyibdwo3#
是啊,tcc不支持多数据源。 不过可以自己修改源码实现,我们已经实现了该功能
n8ghc7c14#
这个问题也是困扰了我们很久,希望对楼主有帮助
eivgtgni5#
environment信息补充一下? 另外,不使用TCCfence的时候没问题吗?
多数据源,不使用TCCfence 也是会有问题的, rollback跟commit都是使用primary数据源的
vjhs03f76#
environment信息补充一下? 另外,不使用TCCfence的时候没问题吗?
多数据源,不使用TCCfence 也是会有问题的, rollback跟commit都是使用primary数据源的
堆栈发一下吧,我自己在我们内部是实现了对接sharding且用上这个功能的,没有你说的问题。
现在你们的问题是已经解决了?还是和楼主说的一样npe?
sxpgvts37#
@YokenLiao It is not recommended to operate multiple data sources in one branch transaction based on TCC best practices, but it is possible to implement dynamic switching of dataSources.
mklgxw1f8#
environment信息补充一下? 另外,不使用TCCfence的时候没问题吗?
多数据源,不使用TCCfence 也是会有问题的, rollback跟commit都是使用primary数据源的
堆栈发一下吧,我自己在我们内部是实现了对接sharding且用上这个功能的,没有你说的问题。 现在你们的问题是已经解决了?还是和楼主说的一样npe?
我们没用使用shardingjdbc,而是跟楼主一样的使用了mybatisplus多数据源。 因为shardingjdbc 对外来说只有一个数据源的,通过内部的分片规则去路由的。而mybatisplus对外本身就是多数据源的,是需要通过程序手动去路由数据源,如果不设置就会使用primary的数据源。 若try时指定使用的是ds1(非primary)的数据源, commit或者rollback的时候默认就调用primary数据源,这时程序无法感觉是哪个数据源发起的try,即使知道也是无法手动切换的 因为commit跟rollback都在seata发起的事务里执行的
xmakbtuz9#
environment信息补充一下? 另外,不使用TCCfence的时候没问题吗?
多数据源,不使用TCCfence 也是会有问题的, rollback跟commit都是使用primary数据源的
堆栈发一下吧,我自己在我们内部是实现了对接sharding且用上这个功能的,没有你说的问题。 现在你们的问题是已经解决了?还是和楼主说的一样npe?
我们没用使用shardingjdbc,而是跟楼主一样的使用了mybatisplus多数据源。 因为shardingjdbc 对外来说只有一个数据源的,通过内部的分片规则去路由的。而mybatisplus对外本身就是多数据源的,是需要通过程序手动去路由数据源,如果不设置就会使用primary的数据源。 若try时指定使用的是ds1(非primary)的数据源, commit或者rollback的时候默认就调用primary数据源,这时程序无法感觉是哪个数据源发起的try,即使知道也是无法手动切换的 因为commit跟rollback都在seata发起的事务里执行的
二阶段方法切面拦截,将切换的数据源作为参数传递到server,二阶段下发后进切面读取入参切换数据源行不行试试