[英]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.