应用程序抛出以下错误:
org.springframework.beans.factory.NoUniqueBean定义异常:没有定义[org.springframework.transaction.PlatformTransactionManager]类型的合格bean:预期的单个匹配bean,但找到3
大家好,我们有一个webapp,我们升级到了上面的配置,它在java 8、tomcat 8上运行。在第一次与数据库交互(写事务)时,应用程序抛出上述错误。
我们使用了Spring的Hibernate事务管理器实现。我们定义了spring aop,将bo方法包含在事务中,并为某些异常的必要操作(基本上是回滚)提供事务建议。
注意:JDK和tomcat也从6升级到了8
在升级Spring、Hibernate、tomcat和java之前,我们在应用程序中使用了相同的配置(如下所述),这些配置在过去和现在都正常工作,甚至我们没有遇到过这个错误。
每个数据源、会话工厂和事务管理器的定义如下数据源如下
session factory configuration
<bean id="sessionFactory1" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource1"/>
<property name="mappingResources">
<list>
<!-- List of hbm mappings -->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.use_sql_comments">false</prop>
<prop key="hibernate.connection.release_mode">after_transaction</prop>
<prop key="hibernate.c3p0.timeout">1</prop>
</props>
</property>
</bean>
Transaction manager, transaction advice and aop config
<bean id="transactionManager1" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory1"/>
</bean>
<tx:advice id="defaultTxAdvice1" transaction-manager="transactionManager1">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*" rollback-for="com.xyz.platformcore.common.exception.VyasaException"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOperation1" expression="execution(* com..*BO.*(..)) || execution(* com..*Bo.*(..)) || execution(* com..*bo.*(..)) || execution(* com.xyz.platformcore..*BO.*(..)) || execution(* com.xyz.framework..*bo.*(..)) || execution(* com.xyz.framework..*Bo.*(..)) || execution(* com.xyz.platformcore..*Bo.*(..)) || @annotation(com.xyz.platformcore.common.hibernate.VyasaTransactionAwareHibernateOperation) || within(@com.xyz.platformcore.common.hibernate.VyasaTransactionAwareHibernateOperation *)" />
<aop:advisor advice-ref="defaultTxAdvice1" pointcut-ref="serviceOperation1"/>
</aop:config>
My dao method
public void invalidateSomeThing() {
Query query = getSession1().createQuery("update SomeThing set isActive =:isActive");
query.setParameter("isActive", false);
query.executeUpdate();
}
getSession1() gives the Session object from SessionFcatory1 which connects to DataSource1
任何帮助都是非常感激的
正如Spring文档中所述:
名词和定义例外
当BeanFactory被要求提供一个bean实例时引发异常,该实例已找到多个匹配的候选者,而预期只有一个匹配的bean。
所以基本上,你有三个org的Spring“bean”。springframework。交易PlatformTransactionManager
具有相同的标识符和/或名称。最终,你可以想要多少就有多少,但是Spring容器必须有一种方法来“识别”它们。。。通常按类型,然后按名称。
尝试在启动时以debug
模式记录输出;它会一步一步地告诉你正在加载的豆子是什么,以及诸如此类的事情。在任何情况下,你都应该有三个定义org。springframework。交易PlatformTransactionManager
在您的配置中的某个地方。
请看看这个。。。“定义多个事务管理器时,事务管理器缓存无法重新填充”
https://jira.spring.io/browse/SPR-14609
这是Spring FW 4.3.2版本中的一个bug。已在4.3.3中修复。
你好,亚什
当我将我的keycloak版本从3.2.1升级到4.5时,我遇到了以下异常。如果我从3.2.1转到keycloak 4.2.1我就不明白了。看起来像是keycloak 4.5特有的东西。
原因:org。springframework。豆。工厂BeanCreationException:无法自动关联字段:私有组织。springframework。邮政javamail。JavaMailSender.com。xxx。服务impl。NotificationServiceImpl。邮件发送者;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinition
在android版本为4.1.2的时候,这段代码运行良好。但是在4.2.0之后,代码就不工作了,下面是我的代码 我的依赖是
为了帮助大伙儿升级,我们为现在的Apache用户提供了一份重要信息的文档说明。这些只是一些简要说明,你可以从新特性文档或src/CHANGES文件中得到更多信息。 这篇文档仅仅描述了从版本 2.0 到 2.2 的变化,如果你是从1.3版进行升级的,请查考从1.3升级到2.0文档。 编译时配置的改变 编译过程与2.0版本非常相似,你曾经使用过的configure命令行(在安装目录下的build/co
为了帮助大伙儿升级,我们为现在的Apache用户提供了一份重要信息的文档说明。这些只是一些简要说明,你可以从新特性文档或src/CHANGES文件中得到更多信息。 编译时配置的改变 Apache现在使用autoconf和libtool系统来进行安装进程的配置。这个系统用起来很像Apache1.3的APACI系统,但并不相同。 在普通的选择编译模块的基础上,Apache2.0把请求进程的主要部分移到
WARNING 本升级指南仅适用于 2.2 版本升级至 2.3 版本,如果你并非 2.2 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 2 小时 这是你自我操作的步骤,确认将你的 2.2 版本代码升级到 2.3 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up