admin

Kotlin + SpringBoot 2.2.2 @Transactional注解导致 Service 类无法注入属性
小记一下,不知道是不是 BUG,反正现在都没找到解决办法。有如下类:@Service open class Mov...
扫描右侧二维码阅读全文
31
2019/12

Kotlin + SpringBoot 2.2.2 @Transactional注解导致 Service 类无法注入属性

小记一下,不知道是不是 BUG,反正现在都没找到解决办法。

有如下类:

@Service
open class MovieService {

    @Autowired
    lateinit var movieDao: MovieDao
}

MovieService不管是类还是它的方法加上@Transactional后,里面的dao就无法注入了(注意,这里不是网上说的那些MovieService无法注入到其他地方了,而是它里面的属性无法注入),这肯定是代理出了问题,SpringBoot 2.x默认使用CGLIB代理,暂时没去加个接口改用JDK自带的动态代理测试行不行。

最终暂时用手动的方式添加事务吧:

@Configuration
open class DataSourceConfigure {

    @Bean
    open fun dataSourceTransactionManager(datasource: DruidDataSource): DataSourceTransactionManager {
        return DataSourceTransactionManager(datasource)
    }
}

手动开启事务并提交事务:

val transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition)
dataSourceTransactionManager.commit(transactionStatus)
Last modification:December 31st, 2019 at 06:16 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment