无法获取 oracle 和 hikaricp 的驱动程序实例

Posted

技术标签:

【中文标题】无法获取 oracle 和 hikaricp 的驱动程序实例【英文标题】:Failed to get driver instance for oracle and hikaricp 【发布时间】:2018-12-03 17:38:22 【问题描述】:

通过 springboot 应用程序连接到 oracle db 时出现异常。 但我可以使用 sql developer 连接到这个数据库。

我使用 HikariCP 连接数据库

堆栈跟踪的一部分附在此处

Blockquote 018-06-25 13:09:21.778 错误 --- [restartedMain] o.s.b.SpringApplication : 应用程序启动失败 org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件 [******] 中定义的名称为 'collectionApiController' 的 bean 时出错:通过构造函数参数 1 表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'collectionServiceImpl' 的 bean 时出错:通过字段 'collectionRepository' 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件 [******] 中定义的名称为 'collectionRepositoryImpl' 的 bean 时出错:通过构造函数参数 0 表示不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [****/AppConfig.class] 中定义名称为“namedParameterJdbcTemplate”的 bean 创建时出错:通过工厂方法进行 Bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate]:工厂方法“namedParameterJdbcTemplate”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [*****/AppConfig.class] 中定义名称为“dataSource”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[javax.sql.DataSource]:工厂方法'dataSource'抛出异常;嵌套异常是 java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=**** 在 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) 在 lk.dialog.crm.collectionms.CollectionMsApplication.main(CollectionMsApplication.java:35) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) 块引用

块引用

公共类 AppConfig

private String jdbcUrl;
private String user;
private String password;

@Bean
@Scope(SCOPE_PROTOTYPE)
public Logger logger(InjectionPoint injectionPoint) 
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());


public AppConfig(@Value("$application.datasource.url") String jdbcUrl,
                 @Value("$application.datasource.user") String user,
                 @Value("$application.datasource.password") String password) 
    this.jdbcUrl = jdbcUrl;
    this.user = user;
    this.password = password;





@Bean
public DataSource dataSource() 
    HikariConfig config = new HikariConfig();
    config.setJdbcUrl(jdbcUrl);
    config.setUsername(user);
    config.setPassword(password);
    config.setMaximumPoolSize(15);
    return new HikariDataSource(config);

块引用

【问题讨论】:

: Failed to get driver instance for jdbcUrl,分享你的配置 嗨:我更新了它 你能用虚拟值替换 jdbcUrl 值吗? jdbc:oracle:thin:@***.**.**.***:1521:****** 嗨 @user7294900 这些信息够了吗?? 【参考方案1】:

对于 mysql,使用 Spring Boot 框架访问我​​们将 driver 属性更改为 driver-class-name 以使其工作。

【讨论】:

以上是关于无法获取 oracle 和 hikaricp 的驱动程序实例的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring 中使用 HikariCP 连接到 Oracle DB 时发送应用程序名称

PGPool 在 SpringBoot 应用程序中无法与 HikariCP 一起使用

获取数据库连接

Tomcat 8、HikariCP、Hibernate 和 MySQL

HikariCP 如何处理不完整的 JDBC 事务?

HikariCP为什么快?