【问题标题】:Spring Boot application not deploying - Unable to create XADataSource instanceSpring Boot 应用程序未部署 - 无法创建 XADataSource 实例
【发布时间】:2018-03-17 02:29:22
【问题描述】:

我正在尝试部署一个简单的 Spring Boot 应用程序。 application.properties 包含以下内容:

spring.datasource.name=MyDS
spring.datasource.username=user
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.xa.data-source-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
spring.datasource.password=passwd
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.datasource.url=jdbc\:mysql\://host\:3306/mydb
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
entitymanager.packagesToScan: /

部署后,我得到以下信息:

java.lang.IllegalStateException: Unable to create XADataSource instance from 'com.mysql.jdbc.jdbc2.optional.MysqlXADataSource'
        at org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration.createXaDataSourceInstance(XADataSourceAutoConfiguration.java:107)
        at org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration.createXaDataSource(XADataSourceAutoConfiguration.java:94)
        at org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration.dataSource(XADataSourceAutoConfiguration.java:76)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
        ... 47 more

我只在 XA 数据源设置为 org.mysql.jdbc.MySQLDataSource 时遇到过这种异常。在这种情况下,将其设置为 com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 应该可以解决问题。欢迎提出任何建议。

更新:在 pom.xml 中引入旧版本的 Atomikos 后,我可以在 atomikos-util 3.8.0 之间进行选择,在这种情况下,spring-boot:run 会以 java.lang.ClassNotFoundException: com.atomikos.util.Assert 失败。但是,如果我将版本更改为 atomikos-util 4.0.0 或更高版本,我会得到 com.atomikos.diagnostics.Console

【问题讨论】:

    标签: java mysql spring spring-boot atomikos


    【解决方案1】:
    spring.datasource.xa.properties.driver-class-name=com.mysql.jdbc.Driver
    

    您还需要告诉 xa 数据源将使用哪个驱动程序

    【讨论】:

    • 我刚刚这样做了,但我遇到了同样的异常
    【解决方案2】:
    @Bean
    public DataSource dataSource() {
          DataSource dataSource = new DataSource();
          ....
          return dataSource;
    }
    

    这可能会解决问题

    【讨论】:

    • 我创建了以下 bean: @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource(){ return DataSourceBuilder.create().type(MysqlXADataSource.class)。建造(); } 现在我得到以下信息:java.lang.ClassNotFoundException: com.atomikos.icatch.HeuristicMessage 尽管 Atomikos transactions-jta 已经存在于 pom.xml 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2016-06-13
    • 2020-04-13
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多