我已经阅读了许多有关此问题的主题,但仍无法解决。我有这个错误
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中。如何成功做到这一点?
感谢您的帮助。
答案 0 :(得分:0)
尝试以下设置,在我当前的项目中可以正常工作。
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/dbName" />
</bean>