Untitled

 avatar
unknown
plain_text
2 years ago
2.8 kB
5
Indexable
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class ConnectionLoggingAspect {

    @Before("execution(* your.package.repository.*.*(..))")
    public void logConnectionInfo(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        
        for (Object arg : args) {
            if (arg instanceof javax.persistence.EntityManager) {
                // Получите EntityManager и извлеките информацию о соединении
                javax.persistence.EntityManager entityManager = (javax.persistence.EntityManager) arg;
                javax.persistence.EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
                
                if (entityManagerFactory instanceof org.hibernate.internal.SessionFactoryImpl) {
                    org.hibernate.engine.spi.SessionFactoryImplementor sessionFactory =
                            (org.hibernate.engine.spi.SessionFactoryImplementor) entityManagerFactory;
                    
                    // Получите информацию о соединении
                    org.hibernate.engine.jdbc.connections.spi.ConnectionProvider connectionProvider =
                            sessionFactory.getServiceRegistry().getService(org.hibernate.engine.jdbc.connections.spi.ConnectionProvider.class);
                    
                    if (connectionProvider instanceof org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl) {
                        javax.sql.DataSource dataSource = ((org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl) connectionProvider).getDataSource();
                        
                        // Теперь у вас есть доступ к DataSource, и вы можете получить информацию о соединении
                        String dbConnectionId = getDbConnectionId(dataSource);
                        System.out.println("DB Connection ID: " + dbConnectionId);
                    }
                }
            }
        }
    }

    private String getDbConnectionId(javax.sql.DataSource dataSource) {
        // Реализуйте логику извлечения идентификатора соединения для вашей конкретной базы данных
        // Например, для MySQL это может быть что-то вроде: return dataSource.getConnection().createStatement().executeQuery("SELECT CONNECTION_ID()").getString(1);
        return null;
    }
}
Editor is loading...
Leave a Comment