Java 如何为集成测试设置第二个远程数据库?

Java 如何为集成测试设置第二个远程数据库?,java,postgresql,spring-boot,integration-testing,urlconnection,Java,Postgresql,Spring Boot,Integration Testing,Urlconnection,我需要什么方法更适合我的情况的建议 我有一个带有Spring Boot的Java应用程序,现在,对于测试部分,我使用一个localhost PostgreSQL数据库。设置非常简单;我只是在application.properties文件中设置了datasource.url/username/password和端口 现在,我需要为特定的集成测试类使用远程PostgreSQL数据库。因此,据我所知,我至少可以通过两种方式做到这一点: 我可以在application.properties中为远程数

我需要什么方法更适合我的情况的建议

我有一个带有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应用程序,它公开了一些RESTAPI,这些API将通过ClassB的测试进行测试

现在我使用一个本地数据库,但将来我想使用远程数据库

我设法用Maven依赖从Artifactory下载JAR文件,在配置类中搜索JAR文件,得到它的目录,并使用一系列命令来运行它:
{“java”、“-JAR”、“directory.getCanonicalPath()}
,和
ProcessStreamer
来处理它

在我检查JAR文件是否已启动并运行之后,将触发ClassB中的测试,并对最近打开的对API进行REST调用的应用程序执行CRUD操作

关于如何设置第二个远程数据库有什么建议吗


谢谢!

既然您说要同时使用这两个数据库,我将为远程数据库创建一个单独的数据源:

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

这似乎有点复杂,我不确定如何解决您的确切问题。但我可以建议您考虑使用Docker进行此类集成测试;以启动其他Rest API应用程序和辅助Po您可以通过使用Docker Java客户端来启动测试类中的依赖组件,并将其从测试类中删除。