我该如何达到类似的效果:

<jee:jndi-lookup id="datasSource"
     jndi-name="jdbc/dataSourceName" expected-type="javax.sql.DataSource" />
<tx:jta-transaction-manager/>


使用注解?

@Configuration
@EnableTransactionManagement
public class AppConfig {

    @Bean
    public DataSource dataSource() {
      // What goes here?
    }

    @Bean
    public PlatformTransactionManager txManager() {
      // What goes here?
    }
}


我已经看到了很多有关DataSourceTransactionManagerBasicDataSource的示例,但是找不到等效的注释驱动配置(可以找到容器UserTransaction等)。

最佳答案

我知道的唯一方法是复制这些自定义名称空间的名称空间解析器的行为。

因此,<jee:jndi-lookup>org.springframework.ejb.config.JndiLookupBeanDefinitionParser处理,并最终创建一个bean,该bean是带有传递的属性的JndiObjectFactoryBean实例。

同样,<tx:jta-transaction-manager/>org.springframework.transaction.config.JtaTransactionManagerBeanDefinitionParser处理,并基于运行时环境返回类的特定实例。

可以使用的Spring 4的一个简洁功能是@Conditional(参考文献here)。使用@Conditional并使用称为ConditionalOnClass(引用Spring-Boot)的here条件实现,您可以复制<tx...的行为,如下所示:

@Configuration
@ConditionalOnClass(name="weblogic.transaction.UserTransaction")
public class WebLogicTxMgrConfig {

    @Bean
    public JtaTransactionManager txManager() {
        return new WebLogicJtaTransactionManager();
    }

}


我知道这不是一个完整的答案,但是希望可以帮助您创建相关的配置。

09-12 10:08