Spring Boot应用程序未部署 - 无法创建XADataSource实例

时间:2018-03-17 02:29:22

标签: java mysql spring spring-boot atomikos

我正在尝试部署一个简单的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

2 个答案:

答案 0 :(得分:3)

spring.datasource.xa.properties.driver-class-name=com.mysql.jdbc.Driver

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

答案 1 :(得分:1)

@Bean
public DataSource dataSource() {
      DataSource dataSource = new DataSource();
      ....
      return dataSource;
}

这可能会成功