首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot应用程序正在忽略hikaricp配置

Spring Boot应用程序正在忽略hikaricp配置
EN

Stack Overflow用户
提问于 2020-01-24 18:14:45
回答 3查看 5.2K关注 0票数 2

我刚接触stackoverflow,但在这里阅读了大量的帖子,现在已经阅读了stuck.my application.properties,但是配置hikaricp的部分被忽略了/没有效果。

我阅读了https://www.javadevjournal.com/spring-boot/spring-boot-hikari/,并遵循了这些步骤,仍然取得了成功。

pom.xml

代码语言:javascript
复制
    <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

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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);
        }

    }

配置类:

代码语言:javascript
复制
    @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);
        }

我错过了什么?

EN

回答 3

Stack Overflow用户

发布于 2020-01-25 00:17:26

如果您已经在使用带有hikari和数据源配置的application.properties文件,那么当您使用新的HikariDataSource()时,它将覆盖您的application.properties值。

您可以手动创建HikariDataSource,然后从application.properties中删除:

代码语言:javascript
复制
@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值。

票数 2
EN

Stack Overflow用户

发布于 2020-01-27 18:19:47

只有在使用Spring Boot DataSource自动配置时,spring.datasource.hikari.* (以及spring.datasource.url)属性才会起作用。为了实现它,您需要删除此bean:

代码语言:javascript
复制
 @Primary
 @Bean(name = "dataSource")
 public DataSource dataSource() {
     return new HikariDataSource(this);
 }

Spring Boot将使用所有这些属性自动为您创建它。您可以查看DataSourceAutoConfiguration.class了解更多信息。

如果由于某种原因,您无法删除此bean (f.e.,您有另一堆数据源,并且您需要创建手动数据源以将其标记为@Primary),您可以使用“原始”属性来配置hikari。因此,您应该通过删除dataSource()部件来修改属性,而不是删除hikari.方法:

代码语言:javascript
复制
...
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特定的属性,这就是它现在工作的原因。

总结一下:不带hikari.jdbc-url的属性用于手动创建的数据源bean,而带有hikari.url的属性用于Spring Boot datasource自动配置。

票数 2
EN

Stack Overflow用户

发布于 2020-01-27 22:46:10

但是有一些东西在application.properties上不起作用,所以我现在做了: DbConfig.class(es)

代码语言:javascript
复制
@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文件中指定每个数据库的所有参数,包括数据库的名称:

代码语言:javascript
复制
hikari_asterisk.properties
hikari_billing.properties
hikari_voiceapp.properties

这对我很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59894368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档