Me gustaría crear interceptor basado anotación que registrar los detalles actuales DB donde db principal está fallando a la solicitud del servidor y db secundaria comenzarán a dar apoyo a la aplicación.
He encontrado debajo de código de enlace mencionado, pero no pude encontrar la anotación ORCL específico que tiene que ser utilizado para la anotación como @Aspect de AOP en el siguiente, por favor ayuda a encontrar esto.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:orcl="http://www.springframework.org/schema/data/orcl"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/data/orcl
http://www.springframework.org/schema/data/orcl/spring-data-orcl-1.0.xsd">
<aop:config>
<aop:advisor pointcut="execution(* *..PetStoreFacade.insertOrder(..))" 1
advice-ref="racFailoverInterceptor" order="1"/>
<aop:advisor pointcut="execution(* *..PetStoreFacade.*(..))" 2
advice-ref="txAdvice"/>
</aop:config>
<orcl:rac-failover-interceptor id="racFailoverInterceptor"/> 3
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="insert*"/>
<tx:method name="update*"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
</beans>
Básicamente, no hay fuera de la caja "Oracle" anotación que puede ser utilizado para hacer la conmutación por error rac trabajo interceptor. Pero es fácil de añadir nueva anotación costumbre que va a hacer el trabajo por usted.
A condición de que el oráculo de datos ramita está en la ruta de clases
pom.xml Maven
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-oracle</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
Hay que crear una anotación de marcador que desea utilizar.
package org.example;
public @interface OracleFailover {
// just a marker annotation, no body
}
Configurar un asesor para ella
<aop:config>
<aop:advisor
pointcut="@annotation(org.example.OracleFailover)"
advice-ref="racFailoverInterceptor" order="1"/>
</aop:config>
<orcl:rac-failover-interceptor id="racFailoverInterceptor"/>
Y luego usarlo en sus métodos de negocio
package org.example;
@Service
public class SomeBusinessService {
@OracleFailover
void doSomethingWithOracle(){
// body goes here
}
}
Y recuerda que la conmutación por error Rac interceptor debe recorrer antes de su interceptor transnacional, que es la conmutación por error no funcionará como se espera en caso de intercepción de conmutación por error se realiza cuando la transacción ya está activo.