Как настроить вторую удаленную базу данных для интеграционного тестирования? - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужен совет о том, какой метод лучше подойдет для моего случая.

У меня есть приложение Java с Spring Boot, и сейчас, для тестирования, я использую базу данных localhost PostgreSQL.Настройка довольно проста;У меня просто есть datasource.url / username / password и настройка порта в файле application.properties.

Теперь мне нужно использовать удаленную базу данных PostgreSQL для определенного класса тестов интеграции.Итак, насколько я знаю, я могу сделать это по крайней мере двумя способами:

  • Я могу настроить в application.properties другую конфигурацию для удаленной базы данных и использовать ее втестовый класс с environment.getProperty().

  • Или я могу создать компонент для использования этих свойств:

    @Bean
    public DataSource dataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
            dataSourceBuilder.url(dbUrl);
            dataSourceBuilder.username(username);
            dataSourceBuilder.password(password);
            return dataSourceBuilder.build();   
    }
    

И всене так просто, как может показаться.У меня есть класс для конфигурации тестов, ClassA .

У меня есть второй класс с реальными тестами, назовем его ClassB .

Расширения ClassBClass A, и ClassA запускает файл JAR, который является другим Java-приложением, которое предоставляет некоторые остальные API, которые будут протестированы с тестами из ClassB.

Теперь я использую локальную базу данных, но я хочу использоватьудаленный, в будущем.

Мне удалось загрузить файл JAR из Artifactory с зависимостью Maven, и в классе конфигурации я ищу файл JAR, получаю его каталог и используюмассив команд для его запуска: {"java", "-jar", "directory.getCanonicalPath()} и ProcessStreamer для его обработки.

После того, как я проверил, работает ли файл JAR, запускаются ли тесты из ClassB, и они выполняют операции CRUD сНедавно открытое приложение вызывает REST-вызовы к API.

Есть предложения по настройке второй удаленной базы данных?

Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

Поскольку вы говорите, что хотите использовать обе базы данных одновременно, я бы создал отдельный источник данных для удаленной базы данных:

@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 / services:

@Autowired 
@Qualifier("dbRemoteJdbcTemplate") 
private JdbcTemplate dbRemoteTemplate;

Если вы не можете использовать JdbcTemplates напрямую для этого теста, я бы предложил использовать RoutingDataSource из Spring.

...