首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring TransactionManagement与Atomikos

Spring TransactionManagement与Atomikos
EN

Stack Overflow用户
提问于 2020-11-24 04:16:17
回答 1查看 136关注 0票数 0

我正在尝试启动一个具有Atomikos maven依赖性的spring应用程序。

代码语言:javascript
复制
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>

我也是这样自动装配的

代码语言:javascript
复制
 @Autowired
    JtaTransactionManager jtaTransactionManager;

application.yaml文件如下所示

代码语言:javascript
复制
spring:
  mvc:
    throw-exception-if-no-handler-found: true
    resources:
      add-mappings: false
  jta:
    atomikos:
      connectionfactory:
        ignore-session-transacted-flag: false
        unique-resource-name: xa.amq
        min-pool-size: 10
        max-pool-size: 20
      datasource:
        unique-resource-name: xa.db
        min-pool-size: 10
        max-pool-size: 20
        test-query: "select 1"
      properties:
        default-jta-timeout: 50000
  datasource:
    url: jdbc:mysql://mydatabasehost:3306/test
    driverClassName: com.mysql.jdbc.Driver
    username: test
    password: test
    initialization-mode: always

使用上面的yaml配置可以很好地开始。

然而,对于我的用例,我希望我的事务管理器跳过使用默认的spring数据源,而是希望在启动后动态注册数据源bean。我想知道这是否可能。如果我从上面yaml文件中删除我的数据源设置,我会得到以下错误

代码语言:javascript
复制
15:15:19.322 [main] WARN  com.atomikos.jdbc.AtomikosXAConnectionFactory - XAConnectionFactory: failed to create pooled connection - DBMS down or unreachable?
java.sql.SQLException: Database not available
    at org.apache.derby.jdbc.BasicEmbeddedDataSource40.setupResourceAdapter(Unknown Source)
    at org.apache.derby.jdbc.EmbeddedXADataSource.getXAConnection(Unknown Source)
    at com.atomikos.jdbc.AtomikosXAConnectionFactory.createPooledConnection(AtomikosXAConnectionFactory.java:28)
    at com.atomikos.datasource.pool.ConnectionPool.createPooledConnection(ConnectionPool.java:98)
    at com.atomikos.datasource.pool.ConnectionPool.addConnectionsIfMinPoolSizeNotReached(ConnectionPool.java:86)
    at com.atomikos.datasource.pool.ConnectionPool.init(ConnectionPool.java:60)
    at com.atomikos.datasource.pool.ConnectionPool.<init>(ConnectionPool.java:49)
    at com.atomikos.datasource.pool.ConnectionPoolWithConcurrentValidation.<init>(ConnectionPoolWithConcurrentValidation.java:23)
    at com.atomikos.jdbc.AbstractDataSourceBean.init(AbstractDataSourceBean.java:294)
    at org.springframework.boot.jta.atomikos.AtomikosDataSourceBean.afterPropertiesSet(AtomikosDataSourceBean.java:49)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:307)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1251)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1171)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
EN

回答 1

Stack Overflow用户

发布于 2020-12-30 19:13:57

这不是Atomikos的限制,因为它允许动态添加数据源。

看起来Spring Boot的约定重于配置,如果您没有默认数据源,它会尝试创建一个默认数据源。我不是Spring Boot专家,所以我不确定这是否可以被抑制。但是,如果有帮助,在配置中使用虚拟默认数据源可能没有什么坏处。

诚挚的问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64975747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档