【问题标题】:Spring MVC - Tomcat GlobalNamingRessource - Datasource NameNotFoundExceptionSpring MVC - Tomcat GlobalNamingRessource - 数据源 NameNotFoundException
【发布时间】:2018-08-25 12:02:53
【问题描述】:

我已经阅读了很多关于这个问题的帖子,但还无法修复它。我有这个错误

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 类:

@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 放入 Tomcat 的 context.xml 中,则会找到数据源并且一切正常。

但我不想(也不能)更改服务器的 context.xml,所以我想获取数据源并让它在 server.xml 中保持原样。如何成功做到这一点?

感谢您的帮助。

【问题讨论】:

    标签: spring-mvc jndi tomcat8


    【解决方案1】:

    尝试以下设置,在我当前的项目中可以正常工作。

    <bean id="dataSource"
            class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="java:comp/env/jdbc/dbName" />
        </bean>
    

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2017-10-07
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2016-03-27
      相关资源
      最近更新 更多