Хобрук: Ваш путь к мастерству в программировании

Tomcat - Spring DataSource JNDI не найден, но существует

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

Caused by: javax.naming.NameNotFoundException: Name [jdbc/sipreDs] is not bound in this Context. Unable to find [jdbc].

Итак, я попытался сделать некоторую отладку и написать свой заводской метод как:

@Bean
@SneakyThrows
public DataSource dataSource(){
    Context context = new InitialContext();
    NamingEnumeration<NameClassPair> names = context.list("java:comp/env/jdbc");
    System.out.println("========================================");
    System.out.println("           CONTEXT JNDI");
    System.out.println("========================================");
    while (names.hasMore()){
        NameClassPair name = names.next();
        System.out.println(name.getName());
    }
    System.out.println("=========================================");
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    return dsLookup.getDataSource("jdbc/sipreDs");
}

Результат:

========================================
       CONTEXT JNDI
========================================
sipreDs
=========================================

Источник данных определяется в файле conf/context.xml:

 <Resource name="jdbc/sipreDs" auth="Container" type="javax.sql.DataSource"
           maxActvive="100" maxIdle="30" maxWait="10000"
           username="sipre" password="sipre" driverClassName="org.gjt.mm.mysql.Driver"
           url="jdbc:mysql://localhost:3306/sipre"/>

Почему он печатает источник данных с обычным jndi, но использование spring вызывает исключение?


Ответы:


1

Попробуйте следующее

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
return (DataSource) envCtx.lookup("jdbc/sipreDs");

Кажется, вы используете jdbc для поиска контекста и источника данных.

18.03.2014
  • Вы имеете в виду, что предыдущий код не работал в Spring? Я много раз писал подобный код в Spring 3+ и без проблем запускал приложения в Tomcat 7. 18.03.2014
  • Используя контекст JNDI напрямую, он работает, Spring делает то же самое, но выдает исключение... и, кроме того, ранее, до того, как я скопировал установку tomcat, этот код с этой установкой работает... 18.03.2014
  • РЕШЕНО! Это работает, проблема была в пользователе mysql, я забыл его создать, но исключение Spring меня смутило... Спасибо! 18.03.2014
  • Новые материалы

    Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
    Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

    Универсальный базовый доход
    Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

    Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
    Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

    Абсолютно имеет смысл.
    Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

    МАШИННОЕ ОБУЧЕНИЕ И EDA
    Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

    В чем основные различия между ReactJS и React-Native?
    В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

    LeetCode — Умножение строк
    Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..