Spring 引导和 PostgreSQL- HikariCP 总是 returns 空
Spring Boot & PostgreSQL- HikariCP always returns null
我正在尝试创建一个 spring 没有 JPA / Hibernate 的启动应用程序(由于复杂的数据库结构,所以我需要更多地控制查询)
我在让 DataSource 工作时遇到了一些问题,它只返回 Null 而不是 DataSource。
这些是我的 Pom.xml 依赖项:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
这是application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username= postgres
spring.datasource.password = postgres
spring.datasource.driverClassName = org.postgresql.ds.PGSimpleDataSource
spring.datasource.dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
这是我的连接 class 返回数据源:
@Configuration
@PropertySource({"classpath:application.properties"})
public class Conn {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
}
这是我的 RequestHandler,我正在尝试创建连接(现在正在记录,它总是 returns null)。
@RestController
public class Test implements ErrorController {
private DataSource ds;
private static final String PATH = "/error";
@RequestMapping("/connectToDb")
public void doSomething() {
ds = new Conn().dataSource();
System.out.println(ds);
}
@Override
public String getErrorPath() {
return PATH;
}
}
每当我尝试将实际数据源用于准备好的语句时,我都会收到错误消息:
HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
一直在尝试更改 application.properties 以及尝试不同的方法,但到目前为止没有任何效果。我发现类似的帖子有相同的错误信息,但我还没有找到解决问题的方法。
对此有任何意见吗?
谢谢。
问题就在这里
@RestController
public class Test implements ErrorController {
@RequestMapping("/connectToDb")
public void doSomething() {
ds = new Conn().dataSource(); // <<<<<
System.out.println(ds);
}
}
您不能简单地创建配置的新实例。如果你这样做,那么你基本上忽略了所有的注释。您特别需要 Spring 已经创建的实例,您可以通过自动装配来完成。
不过,您不需要传递整个配置,您可以只自动装配那个 bean。
@RestController
public class Test implements ErrorController {
private final DataSource ds;
private static final String PATH = "/error";
public Test(DataSource ds) {
this.ds = ds;
}
@RequestMapping("/connectToDb")
public void doSomething() {
System.out.println(ds);
}
@Override
public String getErrorPath() {
return PATH;
}
}
我正在尝试创建一个 spring 没有 JPA / Hibernate 的启动应用程序(由于复杂的数据库结构,所以我需要更多地控制查询)
我在让 DataSource 工作时遇到了一些问题,它只返回 Null 而不是 DataSource。
这些是我的 Pom.xml 依赖项:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
这是application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username= postgres
spring.datasource.password = postgres
spring.datasource.driverClassName = org.postgresql.ds.PGSimpleDataSource
spring.datasource.dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
这是我的连接 class 返回数据源:
@Configuration
@PropertySource({"classpath:application.properties"})
public class Conn {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
}
这是我的 RequestHandler,我正在尝试创建连接(现在正在记录,它总是 returns null)。
@RestController
public class Test implements ErrorController {
private DataSource ds;
private static final String PATH = "/error";
@RequestMapping("/connectToDb")
public void doSomething() {
ds = new Conn().dataSource();
System.out.println(ds);
}
@Override
public String getErrorPath() {
return PATH;
}
}
每当我尝试将实际数据源用于准备好的语句时,我都会收到错误消息:
HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
一直在尝试更改 application.properties 以及尝试不同的方法,但到目前为止没有任何效果。我发现类似的帖子有相同的错误信息,但我还没有找到解决问题的方法。
对此有任何意见吗? 谢谢。
问题就在这里
@RestController
public class Test implements ErrorController {
@RequestMapping("/connectToDb")
public void doSomething() {
ds = new Conn().dataSource(); // <<<<<
System.out.println(ds);
}
}
您不能简单地创建配置的新实例。如果你这样做,那么你基本上忽略了所有的注释。您特别需要 Spring 已经创建的实例,您可以通过自动装配来完成。
不过,您不需要传递整个配置,您可以只自动装配那个 bean。
@RestController
public class Test implements ErrorController {
private final DataSource ds;
private static final String PATH = "/error";
public Test(DataSource ds) {
this.ds = ds;
}
@RequestMapping("/connectToDb")
public void doSomething() {
System.out.println(ds);
}
@Override
public String getErrorPath() {
return PATH;
}
}