首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PSQLException:服务器请求基于密码的身份验证,但没有提供密码。

PSQLException:服务器请求基于密码的身份验证,但没有提供密码。
EN

Stack Overflow用户
提问于 2020-03-24 03:29:18
回答 2查看 8.4K关注 0票数 2

我有一个Spring项目,尝试连接到本地PostgreSQL数据库。数据源正在从DataSourceBuilder中实例化。为了本例的目的,我有数据库用户名、密码和数据库URL硬编码(它们将通过属性文件传入),实现如下所示:

代码语言:javascript
运行
复制
String url = "jdbc:postgresql://localhost:5433/<TABLENAME>";

String username = <USERNAME>;
String password = <PASSWORD>;

return DataSourceBuilder
            .create()
            .driverClassName("org.postgresql.Driver")
            .url(url)
            .username(username)
            .password(password)
            .build();

当我运行方法时,会引发以下异常:

代码语言:javascript
运行
复制
Caused by: org.postgresql.util.PSQLException: 
The server requested password-based authentication, but no password was provided.
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:534)
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:141)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)

我尝试使用sudo passwd postgres更改postgres用户密码几次,但这似乎行不通。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-03-24 07:38:19

我的猜测是,您没有在Spring容器中注入bean,所以请使用如下所示:

代码语言:javascript
运行
复制
@Bean
public DataSource dataSource() {
    String url = "jdbc:postgresql://localhost:5433/<DATABASE_NAME>";

    String username = <USERNAME>;
    String password = <PASSWORD>;

    return DataSourceBuilder
            .create()
            .driverClassName("org.postgresql.Driver")
            .url(url)
            .username(username)
            .password(password)
            .build();
}

顺便说一下,在您的jdbcUrl中,您需要使用DatabaseName,而不是TableName。

Note:我认为最好利用Spring已经拥有自动配置的所有功能,所以我建议您这样做:

代码语言:javascript
运行
复制
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public class DatabaseConfig extends HikariConfig {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource(this);
    }
}

并使用下列属性:

代码语言:javascript
运行
复制
spring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5433/blog
spring.datasource.hikari.username=user
spring.datasource.hikari.password=user
spring.datasource.hikari.driverClassName=org.postgresql.Driver

您可以在这里查看我的一个工作示例:https://github.com/vladucuvoican/simple-blog/blob/master/src/main/resources/application.properties

票数 0
EN

Stack Overflow用户

发布于 2020-10-07 16:13:26

这个问题可能是豆子扫描引起的。

我也有同样的问题,但是日志没有指出这一点。

尝试:

代码语言:javascript
运行
复制
@Configuration
public class DataSourceConfig {
    @Value("${spring.datasource.driver-class-name}")
    private String driverClass;
    @Value("${spring.datasource.data-username}")
    private String url;
    @Value("${spring.datasource.data-username}")
    private String userName;
    @Value("${spring.datasource.data-password}")
    private String password;

    @Bean
    public DataSource getDataSource() {
        return DataSourceBuilder.create()
                .driverClassName(driverClass)
                .url(url)
                .username(userName)
                .password(password)
                .build();
    }
}

如果使用SpringBoot,请移动到SpringBootApplication运行程序包或手动定义扫描。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60824565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档