2017-05-09 178 views
2

嗨,我們有一個在tomcat應用程序服務器上運行的spring應用程序。我想在JUnit中添加Springboot的集成測試。我現在得到的問題是,嵌入式tomcat服務器沒有存儲我們的數據源,因此無法查找它...如果服務器配置沒有定義數據源,我們的資源中應該有一個後備「context.xml」用過的。但是嵌入式的tomcat並沒有閱讀這個配置,我只是不知道該怎麼做。 以下是失敗的,我JUnit測試點,因爲它不能在嵌入式的Tomcat找到這個JNDI名稱:springboot讀取tomcat-context.xml

@Bean 
public DataSource dataSource() 
{ 
    return new JndiDataSourceLookup().getDataSource("jdbc/myDB"); 
} 

回退的context.xml看起來是這樣的:

<Context> 
<!-- HSQL --> 
    <Resource name="jdbc/myDB" auth="Container" 
      type="javax.sql.DataSource" driverClassName="org.hsqldb.jdbcDriver" 
      url="jdbc:hsqldb:mem:mymemdb;shutdown=true" username="SA" password="" 
      maxTotal="100" maxIdle="5" maxWaitMillis="10000"/> 

    <Manager pathname=""/> 
</Context> 

如何我可以在啓動時將此文件推入嵌入式tomcat嗎?

+1

默認情況下,在嵌入式Tomcat中禁用JNDI。這可能有所幫助:http://stackoverflow.com/questions/24941829/how-to-create-jndi-context-in-spring-boot-with-embedded-tomcat-container –

回答

0

春季啓動提供了許多方法來externalize your configuration ...

您可以定義datasource propertiestomcat/conf/Catalina/<host>背景描述符。

你可以定義你的JNDI名稱:

<Context> 
    <Parameter name="spring.datasource.jndi-name" value="/pathToYourDatasource" /> 
</Context> 

或定義數據源:

<Context> 
    <Parameter name="spring.datasource.url" value="your url" /> 
    <Parameter name="spring.datasource.username" value="your username" /> 
    <Parameter name="spring.datasource.password" value="your password" /> 
</Context> 

即使定義路徑到application.properties這裏設置你的配置:

<Context> 
    <Parameter name="spring.config.location" value="/path/to/application.properties" /> 
</Context> 

這種方式沒有必要以編程方式設置你的硬編碼數據源,你可以將另一個數據庫配置用於測試src/test/resources/application.properties

spring.datasource.url= 
spring.datasource.username= 
spring.datasource.password=