springboot读取tomcat-context.xml

问题描述:

嗨,我们有一个在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://*.com/questions/24941829/how-to-create-jndi-context-in-spring-boot-with-embedded-tomcat-container –

春季启动提供了许多方法来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=