Ошибка: не удалось завершить работу встроенной базы данных: база данных открыта в монопольном режиме; не может открывать дополнительные соединения [90135-200] - PullRequest
0 голосов
/ 05 мая 2020

Я использую базу данных H2 для своего тестирования JUnit и получаю эту ошибку в своих тестовых примерах JUNIT -

INFO [extShutdownHook] osjdeH2EmbeddedDatabaseConfigurer osjdeAbstractEmbeddedDatabaseConfigurer.shutdown (AbstractEmbeddedDatabaseConfigurer. * 53 | ||||||||||||| - | Не удалось завершить работу встроенной базы данных: org.h2.jdb c .JdbcSQLNonTransientConnectionException: база данных открыта в монопольном режиме; не могу открыть дополнительные соединения [90135-200]

Мой файл настройки БД выглядит так -

@Configuration
@ComponentScan(basePackages={"com.sample.repository"})

public class SampleDBConfig {

JdbcTemplate jdbcTemplate = null;
DataSource dataSource = null;

@Bean
public JdbcTemplate jdbcTemplate()
{
if(jdbcTemplate == null){
    LOGGER.info("JdbcTemplate is null, so calling to create ");
    jdbcTemplate = new JdbcTemplate(getDataSource());
}else{
    LOGGER.info("JdbcTemplate is already set");
}
return jdbcTemplate;
}


@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
     return new PropertySourcesPlaceholderConfigurer();
}

@Bean
DataSource getDataSource() {
  EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
  if(dataSource == null){
    dataSource = builder
            .setType(EmbeddedDatabaseType.H2)
            .addScript("classpath:folder/initial-setup.sql")
            .build();
}
return dataSource;
}

}

Один из моих тестовых классов JUNIT выглядит так -

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SampleDBConfig.class)
public class XyxImplTest{

@Autowired
ClassInTestImpl classInTestImpl ;

@Test
public void testMethod(){
.......
}
}

И один из классов, которые я тестирую, выглядит следующим образом -

@Component
@Transactional(rollbackFor = Exception.class)
public class ClassInTestImpl implements ClassInTest {

@Autowired
private JdbcTemplate jdbcTemplate;
.....

Я использую SpringJUnit4ClassRunner.class для своих тестов JUNIT и вызываю этот класс настройки БД из каждого тестового класса JUNIT с помощью @ContextConfiguration (классы = SampleDBConfig.class). Я не хочу выполнять тесты JUNIT последовательно, есть ли способ решить эту проблему?

...