Micronaut: состояние гонки в MicronautTest при инициализации соединения jdb c - PullRequest
0 голосов
/ 21 апреля 2020

После обновления с Micronaut 1.3.2 до 1.3.4 наши модульные тесты, включающие слой jdb c, случайно завершаются с ошибкой:

io.micronaut.transaction.exceptions.NoTransactionException: Текущей транзакции нет. Рассмотрите возможность объявления @Transactional для окружающего метода

Сбой примерно 50% времени

Исключение происходит в этом блоке кода

@PostConstruct
@Transactional
private fun init() {
    liquibase = Liquibase(
        "db/liquibase-changelog.xml",
        ClassLoaderResourceAccessor(),
        JdbcConnection(dataSource.getConnection())
    )
}

в этом классе

@Singleton
open class TestUtils {
    @Inject
    @field:Client("/")
    lateinit var client: HttpClient
    @Inject
    lateinit var objectMapper: ObjectMapper
    @field:Property(name = "micronaut.application.name")
    lateinit var applicationName: String
    @field:Property(name = "micronaut.application.version")
    lateinit var applicationVersion: String
    @field:Property(name = "testing.security.access-token")
    lateinit var accessToken: String

    @Inject
    lateinit var dataSource: DataSource

    private var liquibase: Liquibase? = null

    @PostConstruct
    @Transactional
    private fun init() {
        liquibase = Liquibase(
            "db/liquibase-changelog.xml",
            ClassLoaderResourceAccessor(),
            JdbcConnection(dataSource.getConnection())
        )
    }

    fun tearDownDatabase(){
        liquibase?.dropAll()
    }

    fun setUpDatabase(){
        liquibase?.update("")
    }
}

1 Ответ

0 голосов
/ 24 апреля 2020

Наконец-то нашли решение, пришлось перенести инициализацию ликвидазы на собственный метод:

    @PostConstruct
    private fun init() {
        initLiquibase()
    }

    @Transactional
    private fun initLiquibase() {
        liquibase = Liquibase(
            "db/liquibase-changelog.xml",
            ClassLoaderResourceAccessor(),
            JdbcConnection(dataSource.getConnection())
        )
    }

Теперь, похоже, снова работает 100% времени

...