2017-05-09 13 views
2

こんにちは、Tomcatアプリケーションサーバー上で動作するSpringアプリケーションがあります。 JUnitでSpringbootとの統合テストを追加したいと思います。埋め込まれたTomcatサーバーが私たちのデータソースを保存していないので、それを参照することができないという問題がありました...サーバ設定にデータソースが定義されていない場合、リソース内にfallback "context.xml"中古。しかし、組み込みのTomcatはこの設定を読んでいないので、これを行う方法を理解できません。 それが埋め込まれたTomcatの中で、このJNDI名を見つけることができませんので、以下は、私のJUnitテストの失敗のポイントです:springboot read 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

春ブーツは、あなたがあなたのtomcat/conf/Catalina/<host>コンテキスト記述子であなたのdatasource propertiesを定義することができexternalize your configuration ...

に多くの方法を提供します。

あなたは、JNDI名を定義できます。

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

:でもapplication.propertiesとここにあなたの構成の設定へのパスを定義する

<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> 

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

またはDataSourceを定義しますこの方法では、ハードコードされたデータソースをプログラムで設定する必要はありません。 src/test/resources/application.properties

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