【发布时间】: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