Как программно установить свойство/атрибут аннотации?

Поэтому мне нужно установить параметр тайм-аута для аннотации @Transactional. Это свойство будет получено из файла свойств, который я не могу сделать, так как я сталкиваюсь с «Значение атрибута аннотации Transactional.timeout должно быть постоянным выражением». Что-то вроде этого

@Value("${mytimeout}")
private int myTimeout;

@Transactional(timeout=myTimeout)
public void myMethod(){
}

Единственный раз, когда атрибут тайм-аута может быть установлен переменной, это когда переменная является окончательной.

Итак, я подумал, можно ли программно установить свойство тайм-аута при использовании аннотации @Transaction. Или любым другим способом, которым я могу установить этот атрибут. Спасибо!


person learning_dev_me    schedule 02.04.2014    source источник


Ответы (1)


  • Если вам нужен одинаковый тайм-аут для всех транзакций, вы можете настроить его как defaultTimeout в своем диспетчере транзакций.

  • В противном случае вы можете попробовать поиграть с пользовательскими AnnotationTransactionAttributeSource и TransactionAnnotationParser, хотя вам нужно будет заменить <tx:annotation-drivern> ручным определением соответствующих bean-компонентов, чтобы настроить источник пользовательских атрибутов.

    Затем вы можете создать пользовательскую аннотацию и заставить TransactionAnnotationParser генерировать TransactionDefinition с пользовательским тайм-аутом, когда он увидит вашу аннотацию.

  • В противном случае самый простой способ решить эту проблему — отказаться от использования @Transactional и использовать вместо него TransactionTemplate.

person axtavt    schedule 02.04.2014