Spring MVC - Tomcat GlobalNamingRessource - Источник данных NameNotFoundException - PullRequest
0 голосов
/ 24 августа 2018

Я прочитал много веток об этой проблеме, но пока не смог ее исправить.У меня есть эта ошибка

Caused by: javax.naming.NameNotFoundException: Name [jdbc/dbName] not bound to this context

У меня есть tomcat 8.5 server.xml:

<GlobalNamingResources>
    <Resource auth="Container"       
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
              name="UserDatabase" 
              pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />

    <Resource auth="Container" 
              driverClassName="oracle.jdbc.OracleDriver" 
              maxActive="10" 
              maxIdle="5" 
              maxWait="-1" 
              name="jdbc/dbName" 
              password="12345" 
              type="javax.sql.DataSource"        
              url="jdbc:oracle:thin:@(DESCRIPTION =   (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1234))    (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1234))    (LOAD_BALANCE = yes)(CONNECT_DATA =(SERVICE_NAME = ABCDEF)    (FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC))))" 
              username="abcdef" />

У меня есть класс main.java.DataConfig в первом приложении под названием "framework":

@Configuration
@EnableTransactionManagement
@MapperScan("main.java.mapper")
public class DataConfig {
    @Autowired
    private ResourceLoader resourceLoader;
    /**
     * dataSource
     * @return
     */
    @Bean(destroyMethod = "")
    public DataSource dataSource() {
        JndiDataSourceLookup jndi = new JndiDataSourceLookup();
        return jndi.getDataSource("java:comp/env/jdbc/dbName");
    }
    ...

Я упаковываю это приложение как войну и устанавливаю его как наложение для другого приложения.Таким образом, в этом приложении у меня есть файл META-INF / context.xml, подобный следующему:

<Context>
   <ResourceLink    global="jdbc/dbName"
                    type="javax.sql.DataSource" 
                    name="jdbc/dbName" />
</Context>

Приложение прекрасно работает с Maven, и требуемая зависимость хорошо упакована в войне, однако приложение не можетнайдите GlobalNamingResource "dbName".

Теперь, если я добавлю GlobalNamingResource в context.xml в Tomcat, источник данных будет найден, и все будет нормально.

Но я не хочу(и не могу) изменить context.xml сервера, поэтому я хочу получить источник данных и оставить его как есть в server.xml.Как добиться успеха?

Спасибо за помощь.

1 Ответ

0 голосов
/ 25 августа 2018

Попробуйте с настройкой ниже, это нормально работает в моем текущем проекте.

...