Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

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

Для использования 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.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Обработка исключений 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.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой тег используется для упрощения конфигурации JNDI DataSource в Spring?
1 / 5
Свежие материалы