Как лениво загружать конфигурации LDAP в Spring Application.

У меня есть application-context.xml, в котором есть bean-компоненты, как показано ниже.

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" >
    <property name="jndiName" value="java:/comp/env/DB_NAME" />

</bean>

<bean id="jdbcTemplate" name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

и один context.xml вроде

<ResourceLink name="DB_NAME1" global="application/cn=MyDB,ou=Database Connections" />

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Если вы заметили, что в моем context.xml я сохранил имя своего ресурса как DB_NAME1.

Я также сохранил default-lazy-init="true" в теге beans вверху файла application-context.xml. Тем не менее я получаю ошибку ниже

javax.naming.NameNotFoundException: Name [DB_NAME] is not bound in this Context. Unable to find [DB_NAME].

Итак, мой вопрос: как лениво загрузить мой jdbcTemplate/dataSource.

Потому что в моем приложении некоторые службы обращаются к БД, а некоторые — к другим службам. Таким образом, даже если БД не работает, другие службы не должны перестать работать.


person Jaikrat    schedule 02.02.2017    source источник


Ответы (1)


Вот я и нашел временное решение своей проблемы.

Написал новый метод, который ищет конфигурацию JNDI и создает jdbcTemplate, и если это не удается, я получаю исключение.

public JdbcTemplate getJdbcTemplate() {
    try {
        Context initContext = new InitialContext();
        myDataSource = (DataSource) initContext.lookup("java:/comp/env/DBNAME");
        myjdbcTemplate = new org.springframework.jdbc.core.JdbcTemplate(dataSource);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return jdbcTemplate;
}

Этот метод я вызываю каждый раз из других моих методов DAOImpl, как показано ниже.

  getJdbcTemplate().query("MySp", args, myBeanRowMapper);

Пока работает. Но если вы видите лучший подход, пожалуйста, ответьте здесь.

Спасибо

person Jaikrat    schedule 02.02.2017