如何用jndi名称连接do数据库?

4si2a6ki  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(215)

我正在尝试连接到中的数据库 AppConfig.class :

@PropertySource("classpath:persistence-jndi.properties")
public class AppConfig {

按jndi名称:

@Bean
public DataSource dataSource() throws NamingException {
    String pathProperties = environment.getProperty("URL");
    return (DataSource) new JndiTemplate().lookup(pathProperties);
}

持久性-jndi.properties: URL = java:comp/env/jdbc/task11dao web.xml文件:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <resource-ref>
<res-ref-name>jdbc/task11dao</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>

context.xml(main-webapp-meta-inf-context.xml):

<GlobalNamingResources>
        <ResourceLink  name="jdbc/task11dao" auth="Container"
                       type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
                       url="jdbc:postgresql://localhost:3306/task11dao"
                       username="postgres" password="postgres" maxActive="20" maxIdle="10" maxWait="-1"/>
    </GlobalNamingResources>

当我运行tomcat服务器时,我得到一个异常(下面您可以看到stacktrace):

Caused by: org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Data source is closed
at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:59)
at org.springframework.jdbc.datasource.init.DataSourceInitializer.execute(DataSourceInitializer.java:111)
at org.springframework.jdbc.datasource.init.DataSourceInitializer.afterPropertiesSet(DataSourceInitializer.java:96)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1799)
... 33 common frames omitted
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC
Connection; nested exception is java.sql.SQLException: Data source is closed
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at
org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:47)
... 37 common frames omitted
Caused by: java.sql.SQLException: Data source is closed
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2087)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 38 common frames omitted

如果我不使用jndi连接,只需:

@Bean
DataSource dataSource() {
    DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
    driverManagerDataSource.setUrl(environment.getProperty(URL));
    driverManagerDataSource.setUsername(environment.getProperty(USER));
    driverManagerDataSource.setPassword(environment.getProperty(PASSWORD));
    driverManagerDataSource.setDriverClassName(environment.getProperty(DRIVER));
    return driverManagerDataSource;
}

一切都很好。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题