Приложение Spring Boot игнорирует конфигурацию hikaricp - PullRequest
2 голосов
/ 24 января 2020

Я новичок в stackoverflow, но читаю тонны постов здесь, а теперь застрял. My application.properties читается, но часть для настройки hikaricp игнорируется / не имеет никакого эффекта.

Я прочитал https://www.javadevjournal.com/spring-boot/spring-boot-hikari/ и следовал за этими шагами там, все еще никакого успеха.

pom. xml

    <dependencies>  
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>5.4.10.Final</version>
        <exclusions>
            <exclusion>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
            </exclusion>
        </exclusions>
    </dependency>    
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jcache</artifactId>
        <version>5.4.10.Final</version>
    </dependency>
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.6.3</version>
    </dependency>        
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>                
        </exclusions>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
         <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
          </exclusion>
        </exclusions>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
         <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
          </exclusion>
        </exclusions>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <exclusions>
    <exclusion>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
          </exclusion>
        </exclusions>
        <scope>test</scope>
        <version>2.2.2.RELEASE</version>
    </dependency>

application.properties

    spring.cache.jcache.config=classpath:ehcache.xml
    spring.datasource.jdbc-url=jdbc:postgresql://VOC-APP202-db:5432/voice-app
    spring.datasource.username=vocapp202
    spring.datasource.password=******
    srping.datasource.driver-class-name=org.postgresql.Driver       
    spring.datasource.type=com.zaxxer.hikari.HikariDataSource
    spring.datasource.hikari.connectionTimeout=1000
    spring.datasource.hikari.idleTimeout=30000
    spring.datasource.hikari.maxLifetime=60000
    spring.datasource.hikari.connectionTestQuery=SELECT * FROM table where id=1
    spring.datasource.hikari.minimumIdle=1
    spring.datasource.hikari.maximumPoolSize=5
    spring.datasource.hikari.poolName=voiceapp-db-pool
    spring.datasource.hikari.autoCommit=false

BlacklistApplication .class:

    package de.mycompany.voice.blacklist_ng;  
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.jpa.repository.config.EnableJpaAuditing;   
    @SpringBootApplication
    @EnableJpaAuditing
    @EnableCaching
    @Configuration
    public class BlacklistngApplication {

        public static void main(String[] args) {
            SpringApplication.run(BlacklistngApplication.class, args);
        }

    }

Класс конфигурации:

    @Configuration
    @ConfigurationProperties("spring.datasource")
    @EnableTransactionManagement
    @EnableJpaRepositories(
            entityManagerFactoryRef = "entityManagerFactory",
            basePackages = {"de.firsttelecom.voice.blacklist_ng.repository.vocapp202"}
    )
    public class VocApp202DbConfig extends HikariConfig {

        @Primary
        @Bean(name = "dataSource")
        public DataSource dataSource() {
            return new HikariDataSource(this);
        }

Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 27 января 2020
Свойства

spring.datasource.hikari.* (а также spring.datasource.url) будут работать, только если вы используете автоконфигурацию Spring Boot DataSource. Чтобы добиться этого, вам нужно удалить этот компонент:

 @Primary
 @Bean(name = "dataSource")
 public DataSource dataSource() {
     return new HikariDataSource(this);
 }

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

Если по какой-то причине вы не можете удалить этот компонент (например, у вас есть другая группа источников данных, и вам нужно создать свой источник данных вручную, чтобы пометить его). как @Primary), вы можете использовать «сырые» свойства для настройки hikari. Таким образом, вместо удаления метода dataSource() вы должны изменить свои свойства, удалив hikari. part:

...
spring.datasource.jdbc-url=jdbc:postgresql://VOC-APP202-db:5432/voice-app
...
spring.datasource.connectionTimeout=1000
spring.datasource.idleTimeout=30000
spring.datasource.maxLifetime=60000
spring.datasource.connectionTestQuery=SELECT * FROM table where id=1
spring.datasource.minimumIdle=1
spring.datasource.maximumPoolSize=5
spring.datasource.poolName=voiceapp-db-pool
spring.datasource.autoCommit=false

Также jdbc-url также является свойством hikari-Speci c, поэтому оно работает сейчас.

Подведем итог: свойства с hikari. и jdbc-url для созданных вручную компонентов источника данных и свойства без hikari. и url для автоконфигурации Spring Boot DataSource.

0 голосов
/ 27 января 2020

, но что-то не работает с application.properties, поэтому я теперь сделал: DbConfig.class (es)

@Primary
@Bean(name = "dataSource")
public DataSource dataSource() {
    HikariConfig config = new HikariConfig("/hikari_voiceapp.properties");
    //HikariDataSource dataSource = new HikariDataSource(config);
    return new HikariDataSource(config);
}

и задаю все параметры каждой базы данных в отдельном файле hikari.properties, включая имя база данных:

hikari_asterisk.properties
hikari_billing.properties
hikari_voiceapp.properties

у меня работает.

0 голосов
/ 24 января 2020

Если вы уже используете файл application.properties с конфигурацией hikari и источника данных, в момент использования нового HikariDataSource (this) он переопределит значения вашего application.properties.

Вы либо создайте свой HikariDataSource вручную и удалите из application.properties:

@Bean(name = "dataSource")
public DataSource dataSource() {
    HikariDataSource hikariDataSource = new HikariDataSource();
    hikariDataSource.setMaximumPoolSize(5);
    hikariDataSource.setMaxLifetime(60000);
    hikariDataSource.setMinimumIdle(1);

    //.. some other configs
    return hikariDataSource;
}

, либо используйте только значения application.properties.

...