2016-08-26 4 views
2

Старый весна XML конфигурации работает нормально, мой Аспект вызов все GetConnection Invoke:Spring boot aop вокруг Datasource.getConnection не работает, кто-нибудь есть идея?

<bean id="connectionInterceptor" class="mypackage.ConnectionAspect"> 
</bean> 

<aop:config> 
    <aop:aspect id="connectionLifecycleAspect" ref="connectionInterceptor"> 
     <aop:pointcut 
      expression="execution(java.sql.Connection javax.sql.DataSource.getConnection(..)) " 
      id="dataSourceGetConnection" /> 
     <aop:around method="aroundGetConnection" pointcut-ref="dataSourceGetConnection" /> 
    </aop:aspect> 
</aop:config> 

Мой класс Java вокруг получить соединение

public class ConnectionAspect implements Serializable { 

private final static Logger logger = Logger.getLogger(ConnectionAspect.class); 

    public Connection aroundGetConnection(ProceedingJoinPoint joinPoint) throws Throwable { 
     Connection connection = (Connection) joinPoint.proceed(); 
     setSessionUser(connection); 
     return connection; 
    } 

Spring загрузки не работает, любой Metod не вызывается, когда я вызов get Connection. Но весенняя служба aop demo работает.

@Component 
@Aspect 
public class ConnectionAspect implements Serializable { 

    @AfterReturning(pointcut = "execution(* javax.sql.DataSource.getConnection(..))", returning = "connection") 
    public Connection setClientIdentifier(Connection connection) 
      throws SQLException { 
     System.out 
       .println("-----------------------------------------------------------------------"); 
     return connection; 


    } 

    @Pointcut("execution(java.sql.Connection javax.sql.DataSource.getConnection(..))") 
    public void aroundConnection() { 
    } 

    @Around("aroundConnection()") 
    public Object aroundConnection2(ProceedingJoinPoint joinPoint) throws Throwable { 
     System.out.println("Completed: " + joinPoint); 
     return joinPoint.proceed(); 
    } 



    @Around("execution(java.sql.Connection javax.sql.DataSource.getConnection(..))") 
    public Object aroundConnection3(ProceedingJoinPoint joinPoint) throws Throwable{ 
     System.out.println("Completed: " + joinPoint); 
     return joinPoint.proceed(); 
    } 
} 
+0

** (1) ** Это непонятное мне: «Весна загрузки не работает, любой Metod не вызывается, когда я называю получить Connection» _ _ Пожалуйста, объясните: Что не работает? Какой метод не называется? Любые сообщения об ошибках? ** (2) ** Вы заметили, что у вас есть два класса/аспекты с одним и тем же именем класса здесь? Может ли это быть проблема? ** (3) ** Является ли какая-либо другая конфигурация XML из вашего файла, содержащего конфигурацию AOP, подхваченной приложением? ** (4) ** Работает ли он, если вы меняете 'aroundGetConnection (..)', чтобы точно иметь одну и ту же подпись (тип возврата!) И контент, например. 'AroundConnection2()'? – kriegaex

ответ

0

SpringBoot использование по умолчанию кот-JDBC как DataSource implements.Then, следующий код будет работать нормально.

@AfterReturning(pointcut = "execution(* org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(..))", returning = "connection") 
public Connection setClientIdentifier(Connection connection) throws SQLException { 
    System.out.println("-----------------------"); 
    return connection; 
}