В поддержке Scala @Transactional
в Scala нет ничего особенного, и вы можете использовать ее без какого-либо Java-кода.Просто убедитесь, что у вас есть «чистые» черты для bean-компонентов, которые будут использовать аннотацию @Transactional
.Вы также должны объявить bean-компонент с типом PlatformTransactionManager
(если вы используете конфигурацию Spring на основе .xml, вы должны использовать "actionManager "для имени bean-компонента, подробности см. В JavaDoc EnableTransactionManagement).Кроме того, если вы используете классы конфигурации на основе аннотаций, убедитесь, что эти классы размещены в своих собственных выделенных файлах, т.е. не размещайте другие классы (объект-компаньон в порядке) в том же файле.Вот простой рабочий пример:
SomeService.scala:
trait SomeService {
def someMethod()
}
// it is safe to place impl in the same file, but still avoid doing it
class SomeServiceImpl extends SomeService {
@Transactional
def someMethod() {
// method body will be executed in transactional context
}
}
AppConfiguration.scala:
@Configuration
@EnableTransactionManagement
class AppConfiguration {
@Bean
def transactionManager(): PlatformTransactionManager = {
// bean with PlatformTransactionManager type is required
}
@Bean
def someService(): SomeService = {
// someService bean will be proxied with transaction support
new SomeServiceImpl
}
}
// companion object is OK here
object AppConfiguration {
// maybe some helper methods
}
// but DO NOT place any other trait/class/object in this file, otherwise Spring will behave incorrectly!