创建了一个新的启动项目,其中仅使用jdbc和Oracle jdbc作为依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
我在应用程序中配置数据源。属性文件并运行这个简单的应用程序,它将使用下面的stacktrace进行轰炸。
2020-05-25 15:07:16.769警告11840---[main]s.c.a.AnnotationConfigApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂未满足的DependencyException:创建名为“jdbcConverter”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/data/jdbc/jdbrepositoriesautoconfiguration$SpringBootJdbcConfiguration.class]:通过方法“jdbconverter”参数4表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂BeanCreationException:创建在类路径资源[org/springframework/boot/autoconfigure/data/jdbc/jdbrepositoriesautoconfiguration$SpringBootJdbcConfiguration.class]中定义的名为“jdbclatel”的bean时出错:通过工厂方法实例化bean失败;嵌套的异常是org。springframework。豆。BeanInstationException:未能实例化[org.springframework.data.relational.core.dialogue.dialogue]:工厂方法“jdbcDialogue”引发异常;嵌套的异常是org。springframework。数据jdbc。存储库。配置。方言解析程序$NoDialectException:无法确定组织的方言。springframework。jdbc。果心JdbcTemplate@7fe083b1.请提供一种方言。2020-05-25 15:07:16.769信息11840---[main]com。扎克塞尔。希卡里。HikariDataSource:HikariPool-1-已启动关机。。。2020-05-25 15:07:17.023信息11840---[main]com。扎克塞尔。希卡里。HikariDataSource:HikariPool-1-关闭完成。2020-05-25 15:07:17.028信息11840---[main]条件评估报告日志监听器:
启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-05-25 15:07:17.035错误11840---[main]o.s.引导。SpringApplication
:应用程序运行失败
如果我使用SpringBoot2.2运行上述代码。7.发布后,它工作正常——没有例外!!
两天后,我想到在localhost上配置一个mysql数据源。同样的程序运行得很好(使用SpringBoot2.3.0.RELEASE),但这次它使用了mysql数据源。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
SpringBoot2.3中的OracleJDBC驱动程序发生了什么。0.0版本?
在SpringBoot2.3中,MySQLJDBC驱动程序正确地执行了什么操作。0.0版本?
谢谢你。
目前Spring data jdbc不支持甲骨文方言您需要定义自己的方言解析器为实现JdbcDialectProvider
的甲骨文方言添加以下类。
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Locale;
import java.util.Optional;
import org.springframework.data.jdbc.repository.config.DialectResolver.JdbcDialectProvider;
import org.springframework.data.relational.core.dialect.AnsiDialect;
import org.springframework.data.relational.core.dialect.Dialect;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcOperations;
public class OracleDialectResolver implements JdbcDialectProvider {
@Override
public Optional<Dialect> getDialect(JdbcOperations operations) {
return Optional.ofNullable(operations.execute((ConnectionCallback<Dialect>) OracleDialectResolver::getDialect));
}
private static Dialect getDialect(Connection connection) throws SQLException {
DatabaseMetaData metaData = connection.getMetaData();
String name = metaData.getDatabaseProductName().toLowerCase(Locale.ROOT);
if (name.contains("oracle")) {
return AnsiDialect.INSTANCE;
}
return null;
}
}
通过放置一个文件spring来注册您的提供者。在类路径的
META-INF
文件夹中创建工厂,并添加以下行。
org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=com.mypackage.jdbctemplate.dialect.OracleDialectResolver //fuly qualified class name of your dialect resolver class
这个方言解析器解决了我与Oracle之间的问题。
@Configuration
public class SpringDataJdbcConfiguration extends AbstractJdbcConfiguration {
@Override
public Dialect jdbcDialect(NamedParameterJdbcOperations operations) {
return AnsiDialect.INSTANCE;
}
}
SpringBoot2.3中的OracleJDBC驱动程序发生了什么。0.0版本?
JDBC驱动程序运行良好。
正如你在评论中已经了解到的,问题是
a)Spring Data JDBC现在需要每个数据库的Dialect
b)Spring Data JDBC不附带Oracle的Dialect
。
如Spring数据中所述,未识别JDBC Firebird方言,并且https://spring.io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0 您需要立即提供自己的方言
实现。
这样的东西应该工作:
class MyOracleDialect extends AnsiDialect {
private static final LimitClause LIMIT_CLAUSE = new LimitClause() {
@Override
public String getLimit(long limit) {
return String.format("FETCH NEXT %d ROWS ONLY", limit);
}
@Override
public String getOffset(long offset) {
return String.format("OFFSET %d ROWS", offset);
}
@Override
public String getLimitOffset(long limit, long offset) {
return String.format("OFFSET %d ROWS FETCH NEXT %d ROWS ONLY", offset, limit);
}
@Override
public Position getClausePosition() {
return Position.AFTER_ORDER_BY;
}
};
@Override
public LimitClause limit() {
return LIMIT_CLAUSE;
}
}
然后,您需要通过方言提供者提供
方言
,如参考问题中所述:
到目前为止,Spring数据团队没有运行与Oracle数据库的集成测试。这是因为很长一段时间以来,不清楚如何以合法的方式做到这一点,因为包括构建基础设施在内的所有代码都是开源的,Oracle需要接受所有类型的东西才能使用数据库实例或其驱动程序。
到目前为止,Docker映像可用于测试,JDBC驱动程序可从Maven Central获得。这仍然有点棘手,因为我所知道的docker图像的当前选项允许您在许多GB的图像大小或大约15分钟的启动时间之间进行选择。
无论如何,有一位社区成员正在处理这个问题:https://jira.spring.io/browse/DATAJDBC-256
因此,我相信,在不久的将来,我们将能够完全支持Oracle。
问题内容: 在硒测试中出现以下错误 我所做的是 环境: Firefox v47.0 Webdriver 3.0.0-beta2 问题答案: 这是完全可以预期的。没有GeckoDriver(木偶)的发行版支持该类。这是Mozilla团队开发Marionette的首要任务之一。
我正在尝试开发spring boot应用程序,它将在后端连接到oracle DB。对于oracle db连接,我添加了ojdbc6驱动程序依赖项。我在.m2文件夹中已经有了ojdbc6 jar。但我仍然在POM.xml中发现ojdbc6依赖项“缺少工件com.oracle:ojdbc6:jar:11.2.0.3”的编译错误 pom.xml中出错:
我正试图在eclipse中运行我的第一个webdriver脚本。使用jre1。8.0_1111. 我使用了下面的代码,但它显示了错误。请帮我查一下密码。 错误堆栈 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅github。com/mozilla/geckodr
我使用Firefox驱动程序编写了许多Selenium测试,效果很好。但由于某些原因,我现在在尝试实例化Firefox驱动程序时遇到了一个异常。有人知道Firefox的任何更新可能会影响这一点吗? 下面是两行代码。异常发生在第2行:- 以下是我得到的例外情况:- “WebDriver.dll中出现“OpenQA.Selenium.WebDriverException”类型的异常,但未在用户代码中处
如果我使用的是maven插件,并且通过它一切都很好,但是我怎么能在没有Maven插件的情况下运行它,使用运行配置并从那里设置Tomcat。如果我做一些,出现以下错误: 使用插件一切工作:Maven项目 - 但是,当我尝试通过不同的运行配置运行同一个项目时,问题出现了,如下所示: 错误来自标记行: 问题可能与运行配置有关。
我正在使用Selenium Grid。我最近将VM(node)更新到Windows 10,它不再工作了。以下是详细信息 我通过以下方式将此VM Win10注册为网格节点: (这之前与VM Win8一起工作得很好)我可以在网格上看到这个VM Win10注册了3个浏览器IE11、FF和Chrome 在我的代码中,我通过以下方式创建web驱动程序: 我总是得到这个错误当我执行测试 转发新会话时出错,无法