我有一个Spring项目,尝试连接到本地PostgreSQL数据库。数据源正在从DataSourceBuilder中实例化。为了本例的目的,我有数据库用户名、密码和数据库URL硬编码(它们将通过属性文件传入),实现如下所示:
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();
当我运行方法时,会引发以下异常:
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用户密码几次,但这似乎行不通。有什么想法吗?
发布于 2020-03-24 07:38:19
我的猜测是,您没有在Spring容器中注入bean,所以请使用如下所示:
@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已经拥有自动配置的所有功能,所以我建议您这样做:
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public class DatabaseConfig extends HikariConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource(this);
}
}
并使用下列属性:
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
https://stackoverflow.com/questions/60824565
复制相似问题