Tus*_*nne 17 java postgresql gradle spring-boot postgresql-13
我最近尝试了 Postgres。将其安装在本地(PostgreSQL 13.0)上。创建了一个 Maven 项目并使用了 Spring Data JPA,效果很好。而当我尝试使用 Gradle 项目时,我无法连接到数据库并不断收到以下错误。
org.postgresql.util.PSQLException:不支持身份验证类型 10。检查您是否已将 pg_hba.conf 文件配置为包含客户端的 IP 地址或子网,并且它正在使用驱动程序支持的身份验证方案。在 org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:614) ~[postgresql-42.1.4.jar:42.1.4] 在 org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java: 222) ~[postgresql-42.1.4.jar:42.1.4] 在 org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.1.4.jar:42.1.4] 在 org. postgresql.jdbc.PgConnection.(PgConnection.java:194) ~[postgresql-42.1.4.jar:42.1.4] at org.postgresql.Driver.makeConnection(Driver.java:450) ~[postgresql-42.1.4. jar:42.1.4] 在 org.postgresql.Driver。
我也尝试使用 JDBCTemplate。不起作用
修改了参考这篇文章的 pg_hba.cfg 文件- 不起作用
使用已弃用的 Lib - 也不起作用。
请建议我解决这个问题。
我的代码和配置:
@Configuration
public class DataSourceConfig {
@Bean
public DriverManagerDataSource getDataSource() {
DriverManagerDataSource dataSourceBuilder = new DriverManagerDataSource();
dataSourceBuilder.setDriverClassName("org.postgresql.Driver");
dataSourceBuilder.setUrl("jdbc:postgresql://localhost:5432/postgres");
dataSourceBuilder.setUsername("postgres");
dataSourceBuilder.setPassword("root");
return dataSourceBuilder;
}
}
@Component
public class CustomerOrderJDBCTemplate implements CustomerOrderDao{
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
@Autowired
ApplicationContext context;
public void setDataSource() {
//Getting Bean by Class
DriverManagerDataSource dataSource = context.getBean(DriverManagerDataSource.class);
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(this.dataSource);
}
@Override
public Customer create(Customer customer) {
setDataSource();
String sql = "insert into CustomerOrder (customerType, customerPayment) values (?, ?)";
//jdbcTemplateObject.update(sql, customerOrder.getCustomerOrderType(), customerOrder.getCustomerOrderPayment());
KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplateObject.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, customer.getType());
ps.setString(2, customer.getPayment());
return ps;
}
}, holder);
long customerId = holder.getKey().longValue();
customer.setCustomerID(customerOrderId);
return customer;
}
}
Run Code Online (Sandbox Code Playgroud)
依赖
implementation('org.springframework.boot:spring-boot-starter-web')
compile("org.springframework.boot:spring-boot-devtools")
compile(group: 'org.postgresql', name: 'postgresql', version: '42.1.4')
compile("org.springdoc:springdoc-openapi-ui:1.4.1")
compile("org.springframework:spring-jdbc:5.2.5.RELEASE")
Run Code Online (Sandbox Code Playgroud)
password_encryption 设置如下:
postgres=# show password_encryption;
password_encryption
---------------------
scram-sha-256
(1 row)
Run Code Online (Sandbox Code Playgroud)
小智 20
我通过在 PostgreSQL版本 13 中应用以下步骤解决了类似的问题:
将 password_encryption 更改为 md5。
文件:C:\Program Files\PostgreSQL\13\data\postgresql.conf
在主机设置中更改scram-sha-256为md5。
文件:C:\Program Files\PostgreSQL\13\data\pg_hba.conf。
托管所有所有 0.0.0.0/0 md5
更改密码(此恢复密码为 md5 格式)。
例如:ALTER ROLE postgres WITH PASSWORD 'root';
listen_addresses = '*'如果您在非生产环境中工作,请确保进行设置。
文件 : C:\Program Files\PostgreSQL\13\data\postgresql.conf
在目录C:\Program Files\PostgreSQL\13\data\pg_hba.conf 中获取你的 pg_hba.conf 文件
并简单地将列方法下的 scram-sha-256 更改为信任。
它对我有用!
小智 7
<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)
4.0.0
<groupId>org.example</groupId>
<artifactId>postgresJDBC</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 postgresql 9.1+,则必须检查您的 Maven 依赖项,那么您的依赖项应如上所示
要了解 Maven 依赖项,请参阅此链接如何将 PostgreSQL 驱动程序添加为 Maven 中的依赖项?
通过设置password_encryption为scram-sha-256(这是 v13 中的默认值),您还可以获得scram-sha-256身份验证,即使您md5在pg_hba.conf.
现在您在客户端使用不支持该身份验证方法的旧 JDBC 驱动程序版本,即使 PostgreSQL 在三年前的 v10 中引入了它。
您应该升级您的 JDBC 驱动程序。另一种方法是设置password_encryption回md5,但是您必须重置所有密码并以较低的安全性生活。
根据wiki,支持的用于SCRAM-SHA-256加密的JDBC 驱动程序是 42.2.0 或更高版本。就我而言,驱动程序是 41.1.1。将其更改为 42.2.0 或更高版本。那为我修好了。
(马文,pom.xml):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34831 次 |
| 最近记录: |