创建在类路径资源中定义了名为“datasource”的bean时出错

ivqmmu1c  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(584)

我正在尝试通过jndi将postgres数据库连接添加到javaspring应用程序。但是在构建应用程序时,它显示了一个错误“创建名为'datasource'的bean时出错,该bean是在类路径资源中定义的”。
这是我的application.properties文件。

spring.datasource.jndi-name=java:/TestDb
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# spring.jpa.properties.hibernate.dialect =

org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto = none

注意:如果更改application.properties(如下所示),则应用程序生成成功

spring.datasource.url=jdbc:postgresql://localhost:5444/test
spring.datasource.username=test
spring.datasource.password=test

给出了stacktrace。
o、 s.w.c.s.genericwebapplicationcontext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatifiedDependencyException:创建名为“org.springframework.boot.autoconfigure.orm.jpa.hibernatejpaconfiguration”的bean时出错:通过构造函数表示的未满足的依赖关系参数0;嵌套的异常是org.springframework.beans.factory.beancreationexception:创建名为'datasource'的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/jdbc/jndidatasourceautoconfiguration.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[javax.sql.datasource]:工厂方法“datasource”引发异常;嵌套异常为org.springframework.jdbc.datasource.lookup.datasourcelookupfailureexception:查找名为“java:/test”的jndi数据源失败;嵌套的异常是javax.naming.noinitialcontextexception:需要在环境或系统属性中指定类名,或者作为applet参数,或者在应用程序资源文件中指定:java.naming.factory.initial
2021-04-01 13:14:12.383信息14408---[main]条件评估报告日志侦听器:
启动applicationcontext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2021-04-01 13:14:12.398错误14408---[main]o.s.boot.springapplication:应用程序运行失败
org.springframework.beans.factory.unsatifieddependencyException:创建名为“org.springframework.boot.autoconfigure.orm.jpa.hibernatejpaconfiguration”的bean时出错:通过构造函数参数0表示的未满足的依赖关系;嵌套的异常是org.springframework.beans.factory.beancreationexception:创建名为'datasource'的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/jdbc/jndidatasourceautoconfiguration.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[javax.sql.datasource]:工厂方法“datasource”引发异常;嵌套异常为org.springframework.jdbc.datasource.lookup.datasourcelookupfailureexception:查找名为“java:/test”的jndi数据源失败;嵌套的异常是javax.naming.noinitialcontextexception:需要在环境或系统属性中指定类名,或作为小程序参数,或者在应用程序资源文件中:java.naming.factory.initial,位于org.springframework.beans.factory.support.constructorresolver.createargumentarray(constructorresolver)。java:799)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.constructorresolver.autowireconstructor(constructorresolver。java:228) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.autowireconstructor(abstractautowirecapablebeanfactory)。java:1356)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory)。java:1203)~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory)。java:556) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory)。java:516)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory)。java:324) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry)。java:234)~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.com)。java:322) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory。java:202)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.constructorresolver.instantialEusingFactoryMethod(constructorresolver。java:409) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantialEUsingFactoryMethod(abstractautowirecapablebeanfactory)。java:1336)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory)。java:1176)~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory)。java:556) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory)。java:516)~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory)。java:324) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry)。java:234)~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.com)。java:322) ~[spring-beans-5.2.12.发布。jar:5.2.12.release]在org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory。java:202)~[spring-beans-5.2.12.发布。jar:5.2.12.release]位于org.springframework.context.support.abstractapplicationcontext.getbean(abstractapplicationcontext)。java:1109) ~[spring-context-5.2.12.发布。jar:5.2.12.release]位于org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext)。java:869)~[spring-context-5.2.12.发布。jar:5.2.12.release]在org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext。java:551) ~[spring-context-5.2.12.发布。jar:5.2.12.release]在org.springframework.boot.springapplication.refresh(springapplication。java:758)~[spring-boot-2.3.8.发布。jar:2.3.8.release]在org.springframework.boot.springapplication.refresh(springapplication。java:750)~[spring-boot-2.3.8.发布。jar:2.3.8.release]

... 114 common frames omitted
7d7tgy0s

7d7tgy0s1#

通常,你不会定义一个 JNDI datasource 在应用程序内部,但在应用程序容器中。 Spring 但是使用嵌入式tomcat服务器,其中jndi在默认情况下是禁用的。
最简单的方法是使用外部应用程序服务器并通过添加 JNDI 配置。对于嵌入式tomcat,数据源配置应该使用 spring.datasource 属性。
在这里您可以看到如何配置外部应用程序服务器(tomcat):https://www.baeldung.com/spring-persistence-jpa-jndi-datasource
如果您仍然想将jndi与嵌入式tomcat一起使用,您可以在这里看到如何做到这一点:如何使用嵌入式tomcat容器在spring boot中创建jndi上下文

相关问题