Сделка на основе шаблонов весной - PullRequest
1 голос
/ 04 июля 2011

Мы используем Spring + JPA для нашего RESTful приложения веб-сервисов.Это приложение с высоким уровнем транзакций и выполняет множество операций CRUD .

Я использую аннотацию @Transaction для методов выполнения транзакции, и все работает нормально.

Мне просто интересно, можно ли управлять транзакцией 1013 * вне класса в файле конфигурации на основе сопоставления pattern , то есть всеми методами, начинающимися с add /Обновление / удаление может автоматически включать транзакцию (без использования аннотации @ Transaction )?

Может кто-нибудь подтвердить, возможно ли 1025 *?

Если 'Да' , пожалуйста, предоставьте мне какую-нибудь ссылку или пример.

Спасибо.

1 Ответ

5 голосов
/ 04 июля 2011

Конечно!Фактически это было единственно возможное решение до аннотации Java 5 и @Transactional.Посмотрите 10.5.2 Пример реализации декларативной транзакции в документации Spring.Там вы найдете примеры конфигурации разграничения транзакций через XML и AspectJ.

Это простой фрагмент конфигурации из документации, указанной выше:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <!-- ... -->
        </bean>
    </property>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
</aop:config>

Как видите, все методы симя с префиксом get помечается как только для чтения , тогда как все остальные методы FooService (x.y.service.FooService.*(..)) pointcut) являются транзакционными и не только для чтения.

Как вы можетеиспользование более подробного синтаксиса XML дает вам большие преимущества, такие как декларативное и более гибкое разграничение транзакций, в основном благодаря синтаксису AspectJ (сначала обязательно изучите его ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...