Set port number for the embedded h2 database

狂风中的少年 提交于 2021-02-07 12:29:05

问题


I use h2 in-memory database only for the testing purposes. The default port seems to be 8082, which causes my tests to fail on heroku.

I want to change this port number. How can I do that ?

What I've done so far:

  1. There seems to be a file on my local machine ($USER_HOME/.h2.server.properties) that specifies this port. Let alone it is very strange to have that file outside of the application workspace, I cannot check it in heroku.

  2. I tried to set webPort, port in application-test.properties (it is a properties file I use for my tests) but it didn't work (I tried different combinations 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'
}

回答1:


I found the solution. Earlier, I created a base class for my tests, where I create my H2 server. The port was set in the same class.

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

But changing the port doesn't solve the problem. I found out that in contrary to how eclipse runs each test separately, heroku runs all of them once, so the server doesn't get destroyed and is kept alive between two tests. Therefore I have to kill the server after each test class is finished running:

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


来源:https://stackoverflow.com/questions/47587960/set-port-number-for-the-embedded-h2-database

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!