回答

38

春季配置文件可用於此。這將是一個特定的方式:

有無環境的具體屬性文件:

application.properties

spring.profiles.active: dev 

application-dev.properties

spring.jpa.database: MYSQL 
spring.jpa.hibernate.ddl-auto: update 

spring.datasource.url: jdbc:mysql://localhost:3306/dbname 
spring.datasource.username: username 
spring.datasource.password: password 

應用-test.properties

spring.jpa.database: HSQL 

同時擁有的MySQLH2司機pom.xml,像這樣:

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <scope>runtime</scope> 
</dependency> 

<dependency> 
    <groupId>org.hsqldb</groupId> 
    <artifactId>hsqldb</artifactId> 
    <scope>test</scope> 
</dependency> 

最後但並非最不重要的,註釋測試類,@ActiveProfiles("test")

+0

'dev'配置文件對我來說似乎很奇怪。這不是應該是「生產」嗎?在這種情況下,只需將該信息放在'application.properties'中,不需要'spring.profiles.active'。 –

+0

我有一個單獨的'prod'配置文件。如果我們把'dev'信息放在* application.properties *中,那麼這些信息不會泄漏到'test'配置文件中? – Sanjay

+0

我只是說你沒有回答這個問題。開發/測試在你的答案中令人困惑。我期望產品檔案,然後是測試檔案,但不是「開發」檔案。您也可以在生產中使用「prod」配置文件,並保留測試默認值。由於Spring Boot沒有找到任何具體的信息,它會使用嵌入式容器。 –

3

@Sanjay有一種方法來說,但我覺得很困惑。你也可以同樣只有一個production輪廓,當你在生產中是您啓用,是這樣的:

spring.jpa.hibernate.ddl-auto: update 
spring.datasource.url: jdbc:mysql://localhost:3306/dbname 
spring.datasource.username: username 
spring.datasource.password: password 

並且不指定任何東西。如果您在test範圍內添加嵌入式數據庫,它將在您的測試中可用。如果使用默認配置文件運行測試(不進行任何自定義),它將找不到任何數據庫信息(因爲它們存儲在production配置文件中)。在這種情況下,它會嘗試查找嵌入式數據庫併爲您啓動它。如果您需要更多的自定義出於某種原因,你可以有那些application-test.properties(你需要添加ActiveProfiles("test")到你的測試(S)

+1

在我的場景中,我將在我的PC中有一個MySQL數據庫,在開發時在本地運行應用程序時會使用該數據庫。這就是爲什麼我認爲我們需要一個'dev'配置文件來運行應用程序,還有一個'test'配置文件來通過我的IDE運行測試。在這種情況下可以做任何簡化? – Sanjay

+0

只需在您的MySQL DB中添加'application-dev.properties',並在您從IDE運行應用程序時啓用'dev'配置文件。 –

+0

好吧,我的理解是上面的回答看起來適合這種情況,除非我可以跳過'test'配置文件和'@ ActiveProfile',如果'test'配置文件除了數據庫之外什麼也沒有。如果這聽起來不對,請告訴我。 – Sanjay

3

簡單的解決方案,如果有maven建設:只需將一個application.properties文件src/test/resources之下,編輯適當的測試

Spring(引導)配置文件機制是一個非常強大的工具,它在範圍內遠遠超出了「在測試時間和運行時間之間交換設置」,儘管顯然,它可以那也是:)

17

另一種方法是添加註釋@AutoConfigureTestDatabase給你測試類。 我的測試通常是這樣的:

@RunWith(SpringRunner.class) 
@DataJpaTest 
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2) 
public class MyRepositoryTest { 

    @Autowired 
    MyRepository repository; 

    @Test 
    public void test() throws Exception { 
     // Tests... 
    } 
} 
1

簡單的解決方案:

1)中的src/main /資源有application.properties(生產配置):

spring.datasource.url=jdbc:mysql://localhost:3306/somedb 
spring.datasource.username=root 
spring.datasource.password=password 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect 

和應用測試。HSQL配置屬性如下:

spring.jpa.hibernate.ddl-auto = create-drop 
spring.jpa.database = HSQL 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect 
spring.datasource.driverClassName = org.hsqldb.jdbcDriver 
spring.datasource.url: jdbc:hsqldb:mem:scratchdb 
spring.datasource.username = sa 
spring.datasource.password = 

2)如果您還沒有它,請在pom.xml中添加HSQL依賴項。

3)用@ActiveProfiles(「test」)註釋你的測試類。

在我的情況下工作就像魅力。

+0

嘿,你如何設置hsql本身? –

+0

Hi @AlexBondar。您可以在它之前使用該示例,但可以在AutoConfigureTestDatabase中使用replace = Replace.NONE – bpedroso

相關問題