Spring Boot连接Oracle数据库遇ORA-01017认证错误求助
我之前也遇到过几乎一样的问题,结合你给出的配置和错误信息,咱们来一步步解决:
1. 修正application.properties里的核心配置错误
你在application.properties里写错了用户名的配置项:
# 错误的配置 spring.datasource.name=talon # 改成正确的用户名配置 spring.datasource.username=talon
spring.datasource.name是用来给数据源实例命名的,不是数据库登录的用户名,正确的登录用户名配置是spring.datasource.username,这应该是导致ORA-01017的最直接原因——Spring Boot没有用正确的用户名去连接Oracle。
同时,你可以删掉冗余的oracle.dbsource.*配置,因为Spring Boot会自动使用spring.datasource.*下的配置,重复配置只会增加干扰。修正后的application.properties应该是这样:
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=talon spring.datasource.password=talon spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
2. 清理persistence.xml里的冗余JPA框架配置
你的persistence.xml里同时配置了TopLink、Hibernate、OpenJPA、EclipseLink四种JPA实现的连接参数,这会导致Spring在初始化JPA时出现配置混乱。既然你用的是Spring Boot + Hibernate(从spring.jpa.database-platform配置可以看出来),只需要保留Hibernate相关的必要配置,甚至可以完全依赖application.properties的配置,把数据库连接相关的参数从persistence.xml里删掉:
<persistence-unit name="NewPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <class>springoraclesql.demo.domain.Book</class> <properties> <!-- 只保留Hibernate的核心配置,比如DDL策略,根据你的需求调整 --> <property name="hibernate.hbm2ddl.auto" value="validate"/> </properties> </persistence-unit>
这样Spring会自动把application.properties里的数据源配置注入到JPA中,避免配置冲突。
3. 额外排查点(如果上面两步还没解决)
- 检查Oracle用户的权限:确保
talon用户有连接数据库的权限,并且没有被锁定(可以用SQLPlus登录sys用户,执行SELECT username, account_status FROM dba_users WHERE username='TALON';查看状态)。 - 大小写问题:Oracle的用户名和密码在11g及以后默认是大小写敏感的(如果创建用户时加了双引号),确认你在配置里写的
talon和数据库里的用户名大小写一致,DriverManager能连上可能是因为你传参时大小写匹配,但Spring的配置可能因为某些原因转成了大写/小写。
做完以上调整后,重启Spring Boot项目,应该就能解决ORA-01017的登录拒绝错误了。
内容的提问来源于stack exchange,提问作者MrSir

