Tag: 交易

在方法上添加@Transactional后,这个类(服务)不能Autowired bean(仓库)?

在MyBootApplication上添加@EnableTransactionManagement @Bean public Object testBean(PlatformTransactionManager platformTransactionManager){ System.out.println(">>>>>>>>>>TransactionManager is " + platformTransactionManager.getClass().getName()); return new Object(); } @Bean public Object testBean(PlatformTransactionManager platformTransactionManager){ System.out.println(">>>>>>>>>>TransactionManager is " + platformTransactionManager.getClass().getName()); return new Object(); }它打印的TransactionManager是org.springframework.orm.jpa.JpaTransactionManager @Service open class UserService : BaseService() { @Autowired lateinit var repository: UserRepository @Transactional fun updateValid(id: Long, valid: Boolean) { ErrorConstant.ParamErrorCode.IdIsNull.caseThrow { id == 0.toLong() } repository.updateValid(id,valid) […]

Jooq事务:如果在事务中抛出异常,连接不会释放到池中

我使用Jooq的HikariCP。 代码:*在Kotlin: //dataSource is from Hikari DSL.using(dataSource, sqlDialect).transaction { config -> //in create it simply calls dsl.insertInto …. UserRepo.create(User(name="joe"), DSL.using(config)) UserRepo.create(User(name="foo"), DSL.using(config)) } 一切运行正常。 但是,如果我扔在块,连接不关闭(释放)(尽管事务回滚)。 更新: 我是Java新手,所以这是我的错。 在测试中,我曾经抛出Kotlin的Throwable (而不是Exception ),这是Java代码不能正确处理的部分。 一切正常预期与例外。

Kotlin Exposed不提交交易

遵循Exposed上提供的示例,我无法读取创建它的事务外部创建的表/数据。 我正在使用h2-in-memory数据库。 例外是: Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "CITIES" not found; SQL statement: 我已经添加了一个调用提交,但这没有帮助。 如果我读取创建数据的事务中的数据,如链接到github的示例中,它工作正常。 这里是它的一个简化版本: fun main(args: Array<String>) { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver") transaction { create(Cities) City.new { name = "St. Petersburg" } println("Cities: ${City.all().joinToString { it.name }}") //I have added this commit here commit() } //I want to read the data outside […]

如何在Kotlin中更轻松地使用Jooq交易?

我有使用事务写在Kotlin的Jooq代码,有时候我想要一个独立工作的方法,作为一个顶级的动作,有自己的事务,有时候也希望它在同一个事务中与其他方法合作。 例如,我有两个较低级别的函数actionAbc和actionXyz ,我想组合成不同的更高级别的数据方法,并继承它们的事务(如果存在的话),否则有它们自己的。 我知道在Spring或其他框架中有注释,可以添加验证“事务所需”或“创建事务如果没有”类型的功能。 但是,如何在不使用这些库的情况下对Jooq + Kotlin执行相同的操作? 我想出的最接近的是将事务作为可选参数传递,如果缺失,则将其默认为新事务。 但是,如果有人忘记了通过交易,那么使用一个新的顶级和不相关的交易的微妙失败,我不想这样做。 fun tx(ctx: DSLContext = rootContext, codeBlock: DSLContext.() -> Unit): Unit { ctx.transaction { cfg -> DSL.using(cfg).codeBlock() } } } // and used as: fun actionAbc(parm1: String, parm2: Int, ctx: DSLContext = rootContext) { tx(ctx) { … } } fun actionXyz(parm: Date, ctx: DSLContext = rootContext) { […]