【问题标题】:Embedded tomcat jndi definition嵌入式tomcat jndi定义
【发布时间】:2016-02-07 16:50:55
【问题描述】:

我正在使用带有嵌入式 tomcat 的 spring。我不想再使用application.properties,因为它应该被发布到一个运行tomcat的网络服务器上,我现在正在使用来自context.xml的JNDI数据源,效果很好。现在我想为嵌入式 tomcat 定义那个 JNDI 资源,但是它不起作用。

我尝试过的:

context.xml

<?xml version='1.0' encoding='utf-8'?>

<Context>

    <Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/db"/>

</Context>

Configuration.java

@Bean
public DataSource dataSource() {
    final JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    lookup.setResourceRef(true);
    return lookup.getDataSource("jdbc/db");
}

@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {
            tomcat.enableNaming();
            return super.getTomcatEmbeddedServletContainer(tomcat);
        }
    };
}

我得到了:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]:
Factory method 'dataSource' threw exception; nested exception is org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'jdbc/db';
nested exception is javax.naming.NameNotFoundException: Name [jdbc/db] is not bound in this Context. Unable to find [jdbc].

请帮助我,谢谢:)

【问题讨论】:

    标签: java spring tomcat embedded-tomcat-7


    【解决方案1】:

    试试

    lookup.getDataSource("java:/comp/env/jdbc/db");
    

    没有java:comp,找不到jndi。“comp”是组件的缩写,绑定到根上下文。

    【讨论】:

    • 因此lookup.setResourceRef(true);,但我也尝试了前缀,但它不起作用。
    猜你喜欢
    • 2015-03-23
    • 2018-02-25
    • 1970-01-01
    • 2015-04-18
    • 2016-01-07
    • 2011-07-11
    • 2023-03-13
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多