Java Gradle-Oracle XE-未找到合适的驱动程序
docker composeJava Gradle-Oracle XE-未找到合适的驱动程序,java,oracle,gradle,groovy,Java,Oracle,Gradle,Groovy,docker compose oracle: image: quillbuilduser/oracle-18-xe-micro-sq ports: - "1521:1521" # Opatch is an internal java-based daemon in the Oracle container that updates components, don't really need it here. Reduce it's me
oracle:
image: quillbuilduser/oracle-18-xe-micro-sq
ports:
- "1521:1521"
# Opatch is an internal java-based daemon in the Oracle container that updates components, don't really need it here. Reduce it's memory settings.
environment:
- OPATCH_JRE_MEMORY_OPTIONS=-Xms128m -Xmx256m -XX:PermSize=16m -XX:MaxPermSize=32m -Xss1m
格拉德尔·邦德
import groovy.sql.Sql
import org.flywaydb.gradle.task.FlywayCleanTask
import org.flywaydb.gradle.task.FlywayMigrateTask
import oracle.jdbc.driver.OracleDriver;
buildscript {
dependencies {
classpath 'com.oracle.database.jdbc:ojdbc8:12.2.0.1'
}
}
plugins {
id 'org.flywaydb.flyway' version '6.0.8'
}
task createFlywayUser(){
Sql sql = Sql.newInstance('jdbc:oracle:thin:@//localhost:1521/XE', 'mysecretuser', 'mysecretpassword')
try {
sql.execute("""
DO \$\$
BEGIN
CREATE USER flyway
IDENTIFIED BY $project.ext.env.DATABASE_PASSWORD
DEFAULT TABLESPACE system
TEMPORARY TABLESPACE temp
QUOTA 20M on system;
GRANT DBA TO flyway;
END
\$\$;
""".toString())
} catch (Exception e) { /* ignore */ }
finally {
sql.close()
}
}
我正在尝试启动一个oracle db进行测试,正如在生产中一样,我希望使用flyway进行迁移。因此,我想将flyway用户创建为groovy任务,但使用上面的代码,我总是会遇到错误
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@//localhost:1521/XE
因此,我尝试了一些变体来创建sql.newInstance,例如添加驱动程序oracle.jdbc.driver.OracleDriver作为最后一个参数,或者删除@后面的//。但我似乎找不到正确的组合。或者添加Sql.loadDriver('oracle.jdbc.driver.OracleDriver')
我已经设法使用dbeaver连接到数据库,并且可以通过ojdbc8:12.2.0.1驱动程序看到它。(我最初使用的是21.1.0.0)
我还将接受一种更好的方法来创建用户,而不是使用gradle任务(如果有)
configurations {
jdbcdriver
}
dependencies {
jdbcdriver 'com.oracle.database.jdbc:ojdbc8:12.2.0.1'
}
task createFlywayUser(){
doLast {
configurations.jdbcdriver.files.each {
Sql.classLoader.addURL(it.toURI().toURL())
.
.
.
}
}
解决它。但这是一次大规模的黑客攻击