Spring Boot & PostgreSQL - HikariCP всегда возвращает ноль - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать приложение с начальной загрузкой без 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

А вот мой класс Connection, возвращающий источник данных:

@Configuration
@PropertySource({"classpath:application.properties"})
public class Conn {

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }

}

Это мой RequestHandler, где я пытаюсь создать соединение (сейчас ведется запись в журнал, и оно всегда возвращает ноль).

@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, а также пробовал другие методы, но пока ничего не получалось.У похожих постов, которые я обнаружил, было то же сообщение об ошибке, но я до сих пор не нашел решения этой проблемы.

Есть какие-либо комментарии по этому поводу?Благодарю.

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема здесь

@RestController
public class Test implements ErrorController {

    @RequestMapping("/connectToDb")
    public void doSomething() {
        ds = new Conn().dataSource(); // <<<<<
        System.out.println(ds);
    }
}

Вы не можете просто создать новый экземпляр конфигурации.Если вы делаете это, то вы по существу игнорируете все аннотации.Вам особенно нужен экземпляр, который Spring уже создал, что вы можете сделать с помощью автопроводки.

Вам не нужно передавать всю конфигурацию, хотя вы можете просто подключить этот компонент автоматически.

@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;
    }
}
...