我正在尝试部署一个简单的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
。
答案 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;
}
这可能会成功