Итак, согласно плагину gradle jooq readme:
Определение версии jOOQ при использовании загрузочного плагина Spring
При применении spring-boot-gradle-plugin недостаточно объявить версию jOOQ, которую вы хотите добавить через jooq.version = '3.11.9'
, поскольку правила управления зависимостями spring-boot-gradle-plugin имеют приоритет. Вы также должны установить ext['jooq.version'] = '3.11.9'
, чтобы получить запрашиваемую версию jOOQ.
Я написал небольшой тест на соединение с БД книги H2 (см. В конце этого поста) и поместил ext['jooq.version'] = '3.11.10'
в свой файл Gradle (см. Ниже).
Это приводит к предупреждению, что
Не удается разрешить доступ к индексу с помощью аргументов (java.lang.String, java.lang.String)
И в конечном итоге ничего не делает, потому что когда я запускаю тест, я все равно получаю
Спасибо за использование jOOQ 3.11.9
Как мне это исправить?
build.gradle
plugins {
id 'org.springframework.boot' version '2.1.3.RELEASE'
id 'java'
id 'nu.studer.jooq' version '3.0.3'
}
apply plugin: 'io.spring.dependency-management'
group = 'ch.cypherk'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
//web
implementation 'org.springframework.boot:spring-boot-starter-web'
//database
runtime 'com.h2database:h2'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
//jooq
implementation 'org.springframework.boot:spring-boot-starter-jooq'
implementation 'org.jooq:jooq'
jooqRuntime 'com.h2database:h2:1.4.199'
//test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
ext['jooq.version'] = '3.11.10' //required in the presence of the spring boot plugin
jooq{
version = '3.11.10'
edition = 'OSS'
h2(sourceSets.main){
jdbc{
driver = 'org.h2.Driver'
url = 'jdbc:h2:file:~/test;AUTO_SERVER=TRUE'
user = 'sa'
password = ''
}
generator {
name = 'org.jooq.codegen.DefaultGenerator'
database {
name = 'org.jooq.meta.h2.H2Database'
includes = '.*'
excludes = ''
}
target {
packageName = 'ch.cypherk.bookdb'
directory = 'src/main/gen'
}
}
}
}
И тест ...
package ch.cypherk.bookdb;
import org.jooq.*;
import org.jooq.impl.DSL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.sql.Connection;
import java.sql.DriverManager;
import static ch.cypherk.bookdb.public_.Tables.BOOK;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JooqTests {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
private DSLContext create;
@Before
public void openDatabaseConnection(){
Connection conn;
try {
conn = DriverManager.getConnection(url,username,password);
}catch(Exception e){
throw new AssertionError(e);
}
create = DSL.using(conn, SQLDialect.H2);
}
@After
public void closeDatabaseConnection(){
create.close();
}
@Test
public void CLRS_is_in_DB(){
//given
SelectJoinStep<Record> query = create.select().from(BOOK);
//when
Result<Record> result = query.fetch();
//then
assertThat(result.stream().anyMatch(r -> r.getValue(BOOK.TITLE).equals("Introduction to Algorithms")), is(true));
}
}