我需要建议哪种方法更适合我的情况。
我有一个带有Spring Boot的Java应用程序,现在,对于测试部分,我使用localhost PostgreSQL数据库。设置非常简单;我只是在application.properties文件中有datasource.url / username / password和端口设置。
现在,我需要为特定的集成测试类使用远程PostgreSQL数据库。因此,据我所知,我至少可以通过两种方式做到这一点:
我可以在application.properties中为远程数据库设置另一种配置,并在environment.getProperty()
的测试类中使用它。
或者,我可以使一个bean使用这些属性:
@Bean
public DataSource dataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.url(dbUrl);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
事情并不像看起来那样简单。 我有一个用于测试配置的课程, ClassA 。
我有第二堂课进行了实际测试,我们称之为 ClassB 。
ClassB扩展了Class A,ClassA启动了一个JAR文件,这是另一个Java应用程序,它公开了一些其余的API,这些API将通过ClassB的测试进行测试。
现在我使用本地数据库,但是将来我将要使用远程数据库。
我设法从Artifactory上下载了具有Maven依赖关系的JAR文件,并在配置类中搜索JAR文件,获取了该目录,并使用一系列命令来运行它:{{1} }和{"java", "-jar", "directory.getCanonicalPath()}
进行处理。
在我检查JAR文件是否已启动并正在运行之后,就会触发ClassB的测试,并且它们会对最近打开的应用程序进行CRUD操作,从而对API进行REST调用。
关于如何设置第二个远程数据库的任何建议?
谢谢!
答案 0 :(得分:0)
由于您要同时使用两个数据库,因此我将为远程数据库创建一个单独的数据源:
@Configuration
public class MultipleDBConfig {
@Bean(name = "dbRemote")
@ConfigurationProperties(prefix = "spring.dbRemote")
public DataSource dbRemoteDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbRemoteJdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("dbRemote") DataSource dbRemote) {
return new JdbcTemplate(db1);
}
}
然后在您的DAO /服务中使用它们:
@Autowired
@Qualifier("dbRemoteJdbcTemplate")
private JdbcTemplate dbRemoteTemplate;
如果您不能直接在该测试用例中使用JdbcTemplates,那么我建议您使用Spring的RoutingDataSource。