Сбой при поиске источника данных Tomcat JDBC в приложении Spring - PullRequest
0 голосов
/ 10 ноября 2019

JDBC Поиск JNDI начал давать сбой в моем приложении после того, как оно стало известно Spring.

  1. Настройка источника данных JDBC на tomcat правильная, поскольку приложение без пружины может подключаться с такой же настройкой.
  2. Попытка инициализировать JNDIFactoryBean в конфигурации пружины приложения.
    <beans>
    <bean id="myDb" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:comp/env/jdbc/myDb"/>
      <property name="lookupOnStartup" value="true"/>
      <property name="proxyInterface" value="javax.sql.DataSource"/>
    </bean>
    </beans>
Также предпринята попытка добавить ресурс-ref в web.xml приложения.
 <resource-ref> 
  <res-ref-name>jdbc/myDb</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth> 
   <res-sharing-scope>Shareable</res-sharing-scope> 
  </resource-ref> 
 </web-app>
С момента публикации этой темы также пробовал 'jee: jndi-lookup' в весеннем config.xml.
<jee:jndi-lookup expected-type="javax.sql.DataSource" id="myDb" jndi-name="java:comp/env/jdbc/myDb"/>

JDBC JNDI Setup Datasource Setup

CATALINA_HOME / conf / server.xml

<GlobalNamingResources>
    ......

    <Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="5" maxTotal="25" name="jdbc/myDb" password="ABDC" type="javax.sql.DataSource" url="jdbc:sqlserver://myServer:1233;databaseName=myDBdbdev" username="myUser"/>
  </GlobalNamingResources>

CATALINA_HOME / conf / context.xml

<context>
    <ResourceLink global="jdbc/myDb" name="jdbc/myDb" type="javax.sql.DataSource"/>
    ...

</context>

Ошибка StackTrace

javax.naming.NameNotFoundException: имя [jdbc / myDb] не связано в этом контексте. Невозможно найти [jdbc]. в org.apache.naming.NamingContext.lookup (NamingContext.java:833) в org.apache.naming.NamingContext.lookup (NamingContext.java:174) в org.apache.naming.SelectorContext.lookup (SelectorContext.java:163) на javax.naming.InitialContext.lookup (неизвестный источник) на com.abc.myapp.db.DataSourceFactory.createPool (DataSourceFactory.java:126) на com.abc.myapp.db.DataSourceFactory.init (DataSourceFactory.jav * 1036). *

Код для извлечения источника данных

InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/myDb");

1 Ответ

0 голосов
/ 11 ноября 2019

Я только что обнаружил, что приведенный ниже код помогает правильно получить источник данных:

InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myDb")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...