![](/img/trans.png)
[英]How define e chose a second datasource from application.properties on spring boot project
[英]Second datasource in spring application.properties for tests?
我在application.properties
中将数据源定义为Oracle数据库,没关系,控制器和存储库工作正常,我可以保留实体并获取数据库记录。
我写了集成测试。 在将应用程序与数据库连接之前,我创建了一些对象并将其持久保存在@PostConstruct
方法中-没关系。 但是现在,当我将所有内容与数据库连接时,我的测试会尝试从非常大的表中获取记录。 我认为这是由于我的application.properties
文件中定义的数据源是Oracle数据库。
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@blabla
spring.datasource.username=blabla
spring.datasource.password=blabla
spring.jpa.hibernate.ddl-auto=none
spring.jpa.generate-ddl=false
我想使用内存中的HSQL而不是真实的数据库进行测试。 但是我仍然希望我的控制器和存储库使用真正的控制器和存储库。 我该怎么做? 是否有可能在application.properties中添加第二个数据源? 还是更简单的解决方案?
在Spring 4中,您具有@Profile
批注,因此可以利用其优势。 用它自己的属性创建另一个像application-test.properties
文件。
创建测试配置:
@Configuration
@Profile("test")
public class TestConfiguration {
....
}
然后使用@ActiveProfiles
注释为您的课程@ActiveProfiles
注释:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestConfiguration.class)
@ActiveProfiles("test")
public class TestRepository {
...
}
有很多方法可以实现这一点,一种方法是使用Spring概要文件。 测试概要文件将使用与生产概要文件不同的属性文件。
Spring具有org.springframework.mock.jndi.SimpleNamingContextBuilder
程序包,该程序包允许您以编程方式绑定数据源。
我使用的样本测试类:
public class MockJNDIContext {
@BeforeClass
public static void setUpClass() throws Exception {
SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();//Use your own Connection Pool DS here as you require
ds.setURL("jdbc:oracle:thin:@10.xxx.xxx.xx:9999:SID");
ds.setUser("USER");
ds.setPassword("PASSWORD");
//Bind it to the JNDI you need
builder.bind("java:comp/env/jdbc/MY/APP", ds);
}
@Test
public void test(){
System.out.println("JNDI Initialized");
}
}
套房类:
@RunWith(Suite.class)
@Suite.SuiteClasses({
MockJNDIContext.class,
InitializeTestConfig.class
})
public class ServiceSuite{
}
可能有帮助吗? 如果要从另外一个application.props中加载,请使用另外一个类( InitializeTestConfig.class
),该类初始化并传递DS args,然后如上所述添加到套件中并尝试?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.