springboot读取tomcat-context.xml

时间:2017-05-09 09:56:34

标签: java spring tomcat junit

您好我们在tomcat应用程序服务器上运行了一个spring应用程序。我想在JUnit中添加与Springboot的集成测试。我现在遇到的问题是嵌入式tomcat服务器没有存储我们的数据源,因此无法查找...如果服务器配置没有定义数据源,我们的资源中应该有一个后备“context.xml”用过的。但是嵌入式tomcat没有读取这个配置,我只是想不通,怎么做。 以下是我的JUnit测试中的失败点,因为它在嵌入式tomcat中找不到这个JNDI-Name:

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

fallback 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 个答案:

答案 0 :(得分:2)

Spring Boot为externalize your configuration提供了许多方法......

您可以在tomcat/conf/Catalina/<host>上下文描述符中定义datasource properties

您可以定义您的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=