In the example given, the transaction is committed, but needs to be cancelled.
How to do it?

fun fun1() {
    try {
        tranFun()
    } catch (ex: IllegalArgumentException) {
    }
    ...
}

@Transactional
fun tranFun() {
    service.save()
    throw IllegalArgumentException()
}