web-dev-qa-db-fra.com

Définir le numéro de port de la base de données h2 intégrée

J'utilise la base de données h2 en mémoire uniquement à des fins de test. Le port par défaut semble être 8082, ce qui entraîne l'échec de mes tests sur heroku. 

Je veux changer ce numéro de port. Comment puis je faire ça ? 

Ce que j'ai fait jusqu'à présent: 

  1. Il semble y avoir un fichier sur mon ordinateur local ($USER_HOME/.h2.server.properties) qui spécifie ce port. Et encore moins, il est très étrange d’avoir ce fichier en dehors de l’espace de travail de l’application. Je ne peux pas le vérifier dans heroku. 

  2. J'ai essayé de définir webPort, port dans application-test.properties (c'est un fichier de propriétés que j'utilise pour mes tests) mais cela n'a pas fonctionné (j'ai essayé différentes combinaisons server.port, `spring.data.source.h2.webPort, etc.)

application-test.properties

spring.datasource.url=jdbc:h2:mem:tesdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE")
    }
}

apply plugin: 'Java'

sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

test{

    forkEvery = 1
    testLogging {
        showStandardStreams = true
    }
}

repositories {
     maven { url "http://repo.maven.Apache.org/maven2" }
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'1.5.8.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version:'1.5.8.RELEASE'
    compile group: 'mysql', name: 'mysql-connector-Java', version:'5.1.44'
    compile group: 'org.javassist', name: 'javassist', version:'3.18.0-GA'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version:'1.5.8.RELEASE'
    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version:'2.0.14.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version:'1.5.8.RELEASE'
    compile group: 'io.jsonwebtoken', name: 'jjwt', version:'0.7.0'
    compile group: 'org.springframework.security', name: 'spring-security-cas', version:'4.2.3.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-acl', version:'4.2.3.RELEASE'
    compile group: 'bsf', name: 'bsf', version:'2.4.0'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-batch', version:'1.5.8.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version:'1.5.8.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-ldap', version:'4.2.3.RELEASE'
    compile group: 'javax.jdo', name: 'jdo-api', version:'3.0.1'
    compile group: 'com.querydsl', name: 'querydsl-core', version:'4.1.4'
    compile group: 'org.springframework', name: 'springloaded', version:'1.2.8.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-rest', version:'1.5.8.RELEASE'
    compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version:'1.0.6'
    compile group: 'org.scala-lang', name: 'scala-library', version:'2.11.0'
    compile group: 'commons-validator', name: 'commons-validator', version:'1.6'
    compile group: 'commons-io', name: 'commons-io', version:'2.5'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jersey', version:'1.5.8.RELEASE'
    compile group: 'org.modelmapper', name: 'modelmapper', version:'0.7.5'
    compile(group: 'org.Apache.httpcomponents', name: 'httpclient', version:'4.5.3') {
exclude(module: 'commons-logging')
    }
    compile group: 'org.Apache.commons', name: 'commons-lang3', version:'3.4'
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version:'1.5.8.RELEASE') {
exclude(module: 'commons-logging')
    }
    compile group: 'org.Eclipse.jetty.aggregate', name: 'jetty-all', version:'9.2.13.v20150730'
    compile group: 'com.h2database', name: 'h2', version:'1.4.196'
    compile group: 'org.springframework.integration', name: 'spring-integration-test', version:'4.3.12.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-test', version:'4.2.3.RELEASE'
    compile group: 'org.Apache.hadoop', name: 'hadoop-core', version:'1.0.0'
    compile group: 'com.sleepycat', name: 'je', version:'5.0.73'
    compile group: 'commons-dbcp', name: 'commons-dbcp', version:'1.4'
    compile group: 'org.springframework', name: 'spring-webmvc', version:'4.3.12.RELEASE'
    compile group: 'org.springframework.data', name: 'spring-data-commons', version:'1.13.8.RELEASE'
    compile group: 'org.springframework.hateoas', name: 'spring-hateoas', version:'0.23.0.RELEASE'
    compile group: 'org.springframework.data', name: 'spring-data-rest-core', version:'2.6.8.RELEASE'
    compile group: 'org.springframework.plugin', name: 'spring-plugin-core', version:'1.2.0.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version:'4.3.12.RELEASE'
    testCompile group: 'junit', name: 'junit', version:'4.11'
    testCompile group: 'org.springframework', name: 'spring-test', version:'4.3.12.RELEASE'
}
6
Arian Hosseinzadeh

J'ai trouvé la solution. Auparavant, j'avais créé une classe de base pour mes tests, dans laquelle je créais mon serveur H2. Le port a été placé dans la même classe. 

@BeforeClass
public static void init() throws SQLException {
    webServer = Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082");
    webServer.start();
}

Mais changer de port ne résout pas le problème. J'ai découvert que contrairement à la façon dont Eclipse exécute chaque test séparément, heroku les exécute tous une fois, afin que le serveur ne soit pas détruit et reste en vie entre deux tests. Par conséquent, je dois tuer le serveur après l'exécution de chaque classe de test: 

@AfterClass
public static void tearDown() throws SQLException {
    webServer.stop();
}
0
Arian Hosseinzadeh