无法加载驱动程序类org.mariadb.jdbc.Driver

我想在Spring Boot中配置2个JNDI数据源。我尝试了以下配置:

spring.production-datasource.jndi-name=java:/global/production_gateway

spring.production-datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

spring.jpa.show-sql = true

spring.jpa.hibernate.ddl-auto = update

spring.warehouse-datasource.jndi-name=java:/global/production_warehouse

spring.warehouse-datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

spring.jpa.show-sql = true

spring.jpa.hibernate.ddl-auto = update

主要数据源配置:

    @Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.production.entity",

entityManagerFactoryRef = "productionEntityManager",

transactionManagerRef = "productionTransactionManager"

)

@EnableTransactionManagement

public class ContextProductionDatasource {

@Autowired

private Environment env;

@Primary

@Bean(name = "productionDataSourceProperties")

@ConfigurationProperties(prefix="spring.production.datasource")

public DataSourceProperties productionDataSourceProperties() {

return new DataSourceProperties();

}

@Primary

@Bean(name = "productionDataSource")

@ConfigurationProperties(prefix="spring.production.datasource")

public DataSource productionDataSource() {

return DataSourceBuilder.create().build();

}

@Primary

@Bean(name = "productionEntityManager")

public EntityManager productionEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

@Primary

@Bean(name = "productionTransactionManager")

public PlatformTransactionManager productionTransactionManager(final EntityManagerFactory emf) {

final JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(emf);

return transactionManager;

}

@Primary

@Bean(name = "productionExceptionTranslation")

public PersistenceExceptionTranslationPostProcessor productionExceptionTranslation() {

return new PersistenceExceptionTranslationPostProcessor();

}

}

第二个数据源配置:

    @Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.warehouse.entity",

entityManagerFactoryRef = "warehouseEntityManager",

transactionManagerRef = "warehouseTransactionManager"

)

@EnableTransactionManagement

public class ContextWarehouseDatasource {

@Autowired

private Environment env;

@Bean(name = "warehouseDataSourceProperties")

@ConfigurationProperties(prefix="spring.warehouse.datasource")

public DataSourceProperties warehouseDataSourceProperties() {

return new DataSourceProperties();

}

@Bean(name = "warehouseDataSource")

@ConfigurationProperties(prefix="spring.warehouse.datasource")

public DataSource warehouseDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "warehouseEntityManager")

public EntityManager warehouseEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

@Bean(name = "warehouseTransactionManager")

public PlatformTransactionManager warehouseTransactionManager(final EntityManagerFactory emf) {

final JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(emf);

return transactionManager;

}

@Bean(name = "warehouseExceptionTranslation")

public PersistenceExceptionTranslationPostProcessor warehouseExceptionTranslation() {

return new PersistenceExceptionTranslationPostProcessor();

}

}

但是在部署过程中出现错误:

    Caused by: java.lang.IllegalStateException: Unable to set value for property driver-class-name

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.JavaBeanBinder$BeanProperty.setValue(JavaBeanBinder.java:349)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:96)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:79)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:56)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:452)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:570)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:556)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder$Context.access$400(Binder.java:513)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:450)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:391)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:320)

... 132 more

Caused by: java.lang.reflect.InvocationTargetException

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:567)

at deployment.datalis_rest_api.war//org.springframework.boot.context.properties.bind.JavaBeanBinder$BeanProperty.setValue(JavaBeanBinder.java:346)

... 142 more

Caused by: java.lang.RuntimeException: Failed to load driver class org.mariadb.jdbc.Driver in either of HikariConfig class loader or Thread context classloader

at deployment.datalis_rest_api.war//com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:485)

我正在将Spring boot war与部署的mariadb-java-

client-2.4.2.jar一起部署到Wildfly服务器中。当我使用单个数据源配置时,它工作正常。但是有了第二个数据源,我得到了例外。

您知道如何解决此问题吗?

spring.production.datasource.jndi-name=java:/global/production_gateway

spring.production.datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.production.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

spring.production.jpa.show-sql = true

spring.production.jpa.hibernate.ddl-auto = update

spring.warehouse.datasource.jndi-name=java:/global/production_warehouse

spring.warehouse.datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.warehouse.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

spring.warehouse.jpa.show-sql = true

spring.warehouse.jpa.hibernate.ddl-auto = update

第一个数据源:

@Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.production.entity",

entityManagerFactoryRef = "productionEntityManager",

transactionManagerRef = "productionTransactionManager"

)

@EnableTransactionManagement

public class ContextProductionDatasource {

@Primary

@Bean(name = "productionDataSourceProperties")

@ConfigurationProperties(prefix="spring.production")

public DataSourceProperties productionDataSourceProperties() {

return new DataSourceProperties();

}

@Primary

@Bean(name = "productionDataSource")

@ConfigurationProperties(prefix="spring.production")

public DataSource productionDataSource() {

return DataSourceBuilder.create().build();

}

@Primary

@Bean(name = "productionEntityManager")

public EntityManager productionEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

@Primary

@Bean(name = "productionTransactionManager")

public PlatformTransactionManager productionTransactionManager(final EntityManagerFactory emf) {

final JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(emf);

return transactionManager;

}

@Primary

@Bean(name = "productionExceptionTranslation")

public PersistenceExceptionTranslationPostProcessor productionExceptionTranslation() {

return new PersistenceExceptionTranslationPostProcessor();

}

}

第二个数据源:

@Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.warehouse.entity",

entityManagerFactoryRef = "warehouseEntityManager",

transactionManagerRef = "warehouseTransactionManager"

)

@EnableTransactionManagement

public class ContextWarehouseDatasource {

@Bean(name = "warehouseDataSourceProperties")

@ConfigurationProperties(prefix="spring.warehouse")

public DataSourceProperties warehouseDataSourceProperties() {

return new DataSourceProperties();

}

@Bean(name = "warehouseDataSource")

@ConfigurationProperties(prefix="spring.warehouse")

public DataSource warehouseDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "warehouseEntityManager")

public EntityManager warehouseEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

@Bean(name = "warehouseTransactionManager")

public PlatformTransactionManager warehouseTransactionManager(final EntityManagerFactory emf) {

final JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(emf);

return transactionManager;

}

@Bean(name = "warehouseExceptionTranslation")

public PersistenceExceptionTranslationPostProcessor warehouseExceptionTranslation() {

return new PersistenceExceptionTranslationPostProcessor();

}

}

现在我得到:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.

at deployment.datalis_rest_api.war//org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)

at deployment.datalis_rest_api.war//org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:640)

... 41 more

Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.

回答:

更正两个entityManager bean的名称:productionEntityManager和WarehouseEntityManager

entityManagerFactoryRefin @EnableJpaRepositories是beanName引用,

所以用

@Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.production.entity",

entityManagerFactoryRef = "productionEntityManager",

transactionManagerRef = "productionTransactionManager"

)

@EnableTransactionManagement

public class ContextProductionDatasource {

...

@Primary

@Bean

public EntityManager productionEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

@Configuration

@EnableJpaRepositories(

basePackages = "org.datalis.plugin.warehouse.entity",

entityManagerFactoryRef = "warehouseEntityManager",

transactionManagerRef = "warehouseTransactionManager"

)

@EnableTransactionManagement

public class ContextWarehouseDatasource {

...

@Bean

public EntityManager warehouseEntityManager(EntityManagerFactory emf) {

return emf.createEntityManager();

}

你需要的属性名称的匹配@ConfigurationProperties,以财产的价值“ ”与’ ‘

使用 @ConfigurationProperties(prefix="spring.production-datasource")

@ConfigurationProperties(prefix="spring.warehouse-datasource")

并确保您的类路径中有驱动程序

喜欢

<dependency>

<groupId>org.mariadb.jdbc</groupId>

<artifactId>mariadb-java-client</artifactId>

<version>2.5.2</version>

<scope>runtime</scope>

</dependency>

以上是 无法加载驱动程序类org.mariadb.jdbc.Driver 的全部内容, 来源链接: utcz.com/qa/435412.html

回到顶部