簡體   English   中英

在Heroku上使用h2 in-mem db的測試失敗

[英]Tests that use h2 in-mem db fail on Heroku

我的Spring啟動應用程序有一些測試在我的本地傳遞正常,但在Heroku上失敗:

org.h2.jdbc.JdbcSQLException: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use (Bind failed)" [90061-196]

test配置文件的數據源配置:

@Configuration
public class TestDataSourceConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    @Profile("test")
    public DataSource testDataSource() throws URISyntaxException {
        return DataSourceBuilder.create().build();
    }
}

application-test.properties = 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。密碼=

spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

我知道Heroku不支持h2,但這不應該是這種情況,因為應用程序本身會調出db,對吧?

也許我錯了,並沒有因為Heroku不支持h2而失敗,但我沒有任何其他進程在端口8082上偵聽(至少我知道並從我的應用程序中啟動)

這是因為在Eclipse和Heroku上運行測試之間存在差異。 Eclipse分別運行每個測試,這意味着它運行整個應用程序的新開始運行每個測試。 但Heroku依次在一台機器上運行所有測試類。 因此,我必須在每個測試類運行完畢后終止h2服務器:

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

Heroku將傳遞端口號,您需要使用名為PORT環境變量。

要使用此變量來設置應用程序端口,必須在application-test.properties中添加一行:

server.port=${PORT:8082}

或者application-test.yml

server:
     port: ${PORT:8082}

如果未設置PORT (如在本地環境中),則將使用默認值8082

這應該涵蓋java.net.BindException異常。

除非在屬性文件中添加此屬性,否則不會自動生成db

spring.jpa.hibernate.ddl-auto = update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM