Интеграция JNDI DataSource Tomcat и Spring: подключение MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для использования JNDI DataSource, предоставляемого Tomcat, в вашем Spring приложении, вам следует составить описание бина DataSource в файле applicationContext.xml. Тег jee в Spring значительно упрощает процедуру конфигурации:

XML конфигурация:

xml
Скопировать код
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/MyDataSource" 
                 expected-type="javax.sql.DataSource"/>

Значение jndi-name должно соответствовать наименованию, заданному в настройках Tomcat.

При использовании аннотаций в конфигурации, определите бин в классе с применением аннотации @Configuration:

Java
Скопировать код
@Bean
public DataSource dataSource() throws NamingException {
    return (DataSource) new InitialContext().lookup("java:comp/env/jdbc/MyDataSource");
}

Затем произведите инъекцию myDataSource в компоненты Spring для работы с источником данных, управляемым Tomcat.

Кинга Идем в IT: пошаговый план для смены профессии

Конфигурация DataSource: более глубокий взгляд

Настройка свойств DataSource

Настройка производительности DataSource играет важнейшую роль. Укажите параметры DataSource в файле server.xml Tomcat, чтобы обеспечить оптимальную работу вашего приложения. Пример конфигурации:

Tomcat server.xml:

xml
Скопировать код
<Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="20" validationQuery="SELECT 1" .../>

Для корректной работы следует добавить указанные настройки в файл context.xml.

Обработка исключений NamingException

Во время эксплуатации JNDI могут произойти ошибки типа NamingException. Важно обработать их правильно. Логируйте исключения для последующего анализа:

Java
Скопировать код
try {
    dataSource = (DataSource) new InitialContext().lookup(jndiName);
} catch (NamingException e) {
    logger.error("Произошла ошибка при попытке найти JNDI DataSource. Возникла проблема при 'поиске ключей' :)", e);
    throw e;
}

Визуализация

Представьте себе Spring приложение (🏙️) и JNDI DataSource, предоставляемый Tomcat (🚰):

Markdown
Скопировать код
Tomcat’s DataSource 🚰 -- Предоставляет первичный ресурс: соединение с базой данных.
Java
Скопировать код
@Bean
public DataSource dataSource() throws NamingException {
    return (DataSource) new InitialContext().lookup("java:comp/env/jdbc/YourDB");
}
// Связывает ваше приложение 🏙️ с общедоступным водопроводом 🚰

Spring приложению необходимо лишь подключиться к этой инфраструктуре:

Markdown
Скопировать код
// 🏙️ (Spring)
💧 = @Resource(name = "jdbc/YourDB")
private DataSource dataSource;
// Подключает водопровод к водораспределительной системе города

Процесс ясный и наглядный, не правда ли? 🚰➡️🏙️

Уточнение JNDI названий

Важно указывать jndi-name точно в вашей Spring конфигурации – оно должно совпадать с наименованием в файле context.xml Tomcat.

Осваивание конфигураций

Применяйте разнообразные способы конфигурации, исходя из условий развертывания:

  • Централизуйте конфигурацию DataSource с применением тега Resource в META-INF/Context.xml.
  • Ознакомьтесь с документацией Tomcat 8 и Spring 4, чтобы освоить более продвинутые методы настройки JNDI и DataSource.

Упрощенная конфигурация с Spring

Упрощайте настройку JNDI в Spring, используя JndiTemplate в JavaConfig. Это позволит быстро создавать бин DataSource при помощи JNDI.

Java
Скопировать код
@Bean
public JndiTemplate jndiTemplate() {
    return new JndiTemplate();
}

@Bean
public DataSource dataSource(JndiTemplate jndiTemplate) throws NamingException {
    // Для объяснения, что такое JNDI: это своего рода глобального адресного справочника для вашего приложения!
    return jndiTemplate.lookup("java:comp/env/jdbc/MyDataSource", DataSource.class);
}

Полезные материалы

  1. Apache Tomcat 9 (9.0.85) – JNDI Datasource How-ToОфициальное руководство Tomcat по настройке JNDI DataSource.
  2. Начало работы | Доступ к данным с JPA — Углубленное руководство по использованию JPA при осуществлении доступа к данным в Spring.
  3. Урок: Обзор JNDI (Учебные пособия Java™ > Java Naming and Directory Interface) — Обучающий материал Oracle со сводными данными и примерами работы с JNDI.
  4. Spring Framework 6.1.3 API – JndiObjectFactoryBean — Подробное описание JndiObjectFactoryBean в Spring.
  5. Расчет PageRank для разреженных ориентированных графов с большим процентом неработающих ссылок — Обсуждение на Stack Overflow по вопросам использования JNDI DataSource в Spring.