Как именно DelegatingDataSource работает для установки идентификатора Oracle в Spring - PullRequest
0 голосов
/ 11 июня 2019

У меня было требование, где мне нужно установить идентификатор Oracle через Spring AOP. Итак, я наткнулся на один кусок кода, который работает нормально, но я не могу понять, как именно он работает

Аспект класса

@RequiredArgsConstructor
@Component
@Aspect
public class ConnectionPreparerAspect {

   @AfterReturning(value = "execution(java.sql.Connection javax.sql.DataSource.getConnection(..))", returning = "connection")
   public void prepare(Connection connection) throws SQLException {
       CallableStatement cs = connection.prepareCall("{ call DBMS_SESSION.SET_IDENTIFIER(?) }");
      cs.setString(1, "identifier");
      cs.execute();
      cs.close();
   }

}

DataSource

   @Bean
   @Primary
   @FlywayDataSource
   public DataSource dataSource() {
      JndiDataSourceLookup orchestratorDataSourceLookUp = new JndiDataSourceLookup();
      orchestratorDataSourceLookUp.setResourceRef(true);
      final DataSource dataSource = orchestratorDataSourceLookUp.getDataSource("datasource/url");
      return new DelegatingDataSource(dataSource);
   }

Так вот, мой вопрос

  1. Если я создаю JNDI DataSource, то PointCut не работает, но с делегированием Data Source он работает. Почему?
  2. Поскольку я использую загрузку Spring, и я установил свойство «spring.datasource.jndi-name» в файле свойств, который автоматически создает JSDI dataSource, тогда снова мне нужно создать DelegatingDataSource с именем dataSource.
  3. В чем разница между DelegatingDataSource и JndiDataSourceLookup DataSource.
...