无法获取 oracle 的驱动程序实例
Posted
技术标签:
【中文标题】无法获取 oracle 的驱动程序实例【英文标题】:Failed to get driver instance for oracle 【发布时间】:2017-11-15 05:39:49 【问题描述】:我正在尝试连接到我的 oracle 数据库,我正在使用 spring boot 配置和 YAML 文件,我在 pom 和 jpa 中配置了 jdbc,但仍然无法连接。
我为 url 尝试了许多不同的配置:
1) jdbcUrl=jdbc:oracle:thin://test.test.test:1521
2) jdbcUrl=jdbc:oracle:thin@test.test.test:1521
3) jdbcUrl=jdbc:oracle://test.test.test:1521
4) jdbcUrl=jdbc:oracle@test.test.test:1521
这里是我的 application.yml
spring:
profiles: test
datasource:
onlineterminierung:
url: jdbc:oracle: jdbc:oracle:thin://test.test.test:1521
database: test
username: test
password: test
driverClassName: oracle.jdbc.driver.OracleDriver
defaultSchema:
maxPoolSize: 20
hibernate:
hbm2ddl.method: update
show_sql: false
format_sql: true
dialect: org.hibernate.dialect.Oracle10gDialect
这里是 DataSource bean:
/*
* Configure HikariCP pooled DataSource.
*/
@Bean
public DataSource dataSource()
DataSourceProperties dataSourceProperties = dataSourceProperties();
HikariDataSource dataSource = (HikariDataSource) DataSourceBuilder.create(dataSourceProperties.getClassLoader())
.driverClassName(dataSourceProperties.getDriverClassName()).url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername())
.password(dataSourceProperties.getPassword()).type(HikariDataSource.class).build();
dataSource.setMaximumPoolSize(maxPoolSize);
return dataSource;
这里是 pom:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
<scope>test</scope>
</dependency>
这里是堆栈:
HHH000342: Could not obtain connection to query metadata : Failed to get driver instance for jdbcUrl=jdbc:oracle:thin://test.test.test:1521
Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
Caused by: java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:oracle:thin://test.test.test:1521
Caused by: java.sql.SQLException: No suitable driver
有什么想法吗?
【问题讨论】:
jdbc:oracle:thin@语法:
jdbc:oracle:thin:@host:port:db","usname","pwd"
@Autowired
DataSource dataSource;
@Bean(name = "dataSource")
public DriverManagerDataSource dataSource()
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("oracle.jdbc.OracleDriver");
driverManagerDataSource.setUrl("jdbc:oracle:thin:@hostname:1521/dbname");
driverManagerDataSource.setUsername("uname");
driverManagerDataSource.setConnectionProperties(getadditionalJpaProperties());
driverManagerDataSource.setPassword("password");
return driverManagerDataSource;
Properties getadditionalJpaProperties()
Properties properties = new Properties();
// properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
properties.setProperty("hibernate.show_sql", "true");
return properties;
【讨论】:
您能否通过修改主机详细信息和其他内容将以上内容添加到您的配置中。它对我有用 谢谢,现在我收到错误:TNS:listener 目前不知道连接描述符中请求的服务;你知道会是什么吗? 您是否使用 toad 或 sql developer 手动连接到 db? 只需要在url中设置driverManagerDataSource.setUrl("jdbc:oracle:thin:@service:1525/ 你的意思是你的连接没有服务属性【参考方案2】:始终使用长格式的连接 URL,这样您就可以灵活地传递各种连接级别的参数。 GitHub 上的代码示例DataSourceSample 有一个示例 URL 供参考。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename)))";
【讨论】:
【参考方案3】:我遇到了这个问题。我错误地忽略了一行代码
driverManagerDataSource.setDriverClassName("oracle.jdbc.OracleDriver");
或在 bean 配置中
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
我正在使用在 Websphere 上运行的 Oracle 11G 和 Jersey + Boot 服务器
【讨论】:
以上是关于无法获取 oracle 的驱动程序实例的主要内容,如果未能解决你的问题,请参考以下文章
在win10上安装Oracle11g 出现无法实例化怎样解决
Spring boot Oracle Gradle:无法加载驱动程序类:oracle.jdbc.OracleDriver
在Joomla上获取错误:无法读取会话数据和应用程序实例化错误
oracle连接“监听程序当前无法识别连接描述符中请求的服务’怎么解决
oracle 10g ,PL/SQL问题:ORA-12520:TNS:监听程序无法为请求的服务类型找到可用的处理程序,怎么办?如图