我怎样才能达到类似的目的:
<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?
}
}
我见过很多DataSourceTransactionManager
和BasicDataSource
的例子,但我找不到等效的注释驱动配置(找到容器UserTransaction
等)。< / p>
答案 0 :(得分:3)
我所知道的唯一方法是复制这些自定义命名空间的名称空间解析器的行为。
因此,<jee:jndi-lookup>
由org.springframework.ejb.config.JndiLookupBeanDefinitionParser
处理,终极创建一个bean,它是JndiObjectFactoryBean
的实例,带有传入的属性。
类似地,<tx:jta-transaction-manager/>
由org.springframework.transaction.config.JtaTransactionManagerBeanDefinitionParser
处理,并且基于运行时环境,返回类的特定实例。
您可以使用的Spring 4的一个简洁功能是@Conditional
(参考here)。使用@Conditional并使用名为ConditionalOnClass
的{{3}}条件实现(引用Spring-Boot),您可以复制<tx...
这样的行为:
@Configuration
@ConditionalOnClass(name="weblogic.transaction.UserTransaction")
public class WebLogicTxMgrConfig {
@Bean
public JtaTransactionManager txManager() {
return new WebLogicJtaTransactionManager();
}
}
我知道这不是一个完整的答案,但希望能帮助您创建相关配置。