Использовать единственный экземпляр JdbcTemplate - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть класс OracleConfiguration, в котором определены DataSource и Jdbctemplate. Ниже приведен фрагмент кода

@Configuration
//@ConfigurationProperties("oracle")
@PropertySource("classpath:dev.properties")
public class OracleConfiguration {
     //omitted variable names,getters n setter for brevity
DataSource dataSource() throws SQLException {

    OracleDataSource dataSource = new OracleDataSource();
    dataSource.setDriverType(driverType);
    dataSource.setUser(username);
    dataSource.setPassword(password);
    dataSource.setURL(url);
    dataSource.setImplicitCachingEnabled(true);
    dataSource.setFastConnectionFailoverEnabled(true);
    return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.setResultsMapCaseInsensitive(true);
    return jdbcTemplate;
}

Теперь для подключения к базе данных в каждом репозитории я создаю один экземпляр JdbcTemplate и аннотирую его с помощью Autowire, которыйработает нормально.

@Component
public class RolesDaoImpl  implements RolesDao  {

    @Autowired
    private JdbcTemplate jdbcTemplate;  
    // works fine able to perform jdbc operations

Но я читал, что для каждой схемы базы данных должен быть только один экземпляр JdbcTemplate. Как я могу сделать этот код JdbcTemplate универсальным. Я попробовал следующее, но не могу подключиться к Dbиспользуя приведенную ниже технику

public class JdcTemplateDaoImpl {
   private JdbcTemplate jdbcTemplate; //SETTER NOT REQUIRED 

public JdbcTemplate getJdbcTemplate() {

        return jdbcTemplate;
    }
    public void setDataSource ( DataSource dataSource )
    {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

И каждый мой DaoImpl может расширить этот JdcTemplateDaoImpl. Как мне этого добиться?

1 Ответ

0 голосов
/ 16 сентября 2018

Из опубликованных конфигураций выглядит, как будто JdbcTemplate - это одноэлементный компонент (контекст синглтона является областью по умолчанию весной).

Итак, в контексте приложения есть один экземпляр типа JdbcTemplate иэто вводится в репозитории.Поместите точку останова в разные репозитории, и есть вероятность, что вы увидите, что экземпляр один и тот же (тот же адрес в памяти).

Поэтому методика, представленная в последнем фрагменте кода, не требуется

Почему вы думаете, что это не тот же экземпляр?

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