再花几个小时尝试调试后,我在StackOverflow上发布后立即找到了答案。
我从问题中遗漏的一个关键点是InnerThread具有事务处理方法(对不起,认为这是不相关的)。这是OuterThread和InnerThread之间的重要区别。
从Spring文档中:
注意
多个部分在运行时折叠到一个统一的自动代理创建器中,该创建器将应用任何部分(通常来自不同XML Bean定义文件)指定的最强的代理设置。这也适用于和元素。
需要明确的是:在或元素上 使用’proxy-target-class =“ true”’
会强制对所有三个元素使用CGLIB代理。
将以上内容添加到我的配置(基于persistance-
context.xml,您可以在上面看到加载的)行似乎可以解决此问题。但是,我认为这可能是一种快速解决方案,而不是真正的解决方案。
我认为我在这里还有一些更深层次的问题,第一个是我发现Spring与删除的内容一样令人困惑。其次,我可能应该使用Spring的TaskExecutor来启动我的线程。第三,我的线程应实现Runnable而不是扩展Thread(请参见下面的SO问题)。
也可以看看
- 使用ServiceLocatorFactoryBean和@Transactional的BeanNotOfRequiredTypeException (没有什么比在经过数小时的搜索后找到一个表明“此问题已被回答一百万次”的Google线程更好的了)。
- Spring Docs中的6.6节。



