web-dev-qa-db-fra.com

L'autoconfig Spring Boot utilise toujours Tomcat Datasource à la place de HikariCP?

J'ai mon service Spring Boot 1.2.5.RELEASE et je souhaite utiliser la source de données HikariCP au lieu de la valeur par défaut Tomcat-jdbc. Donc, selon ceci Spring Boot Reference Je comprends que je dois juste exclure Tomcat-jdbc du classpath et ajouter HikariCP.

Donc, voici mon pom.xml:

...
<dependencyManagement>
    ...
    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>${spring-boot.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.Apache.Tomcat</groupId>
                        <artifactId>Tomcat-jdbc</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
</dependencies>
...

arbre de dépendance maven:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ myproject-user-manage-webservice ---
[INFO] com.mybusiness.myproject:myproject-user-manage-webservice:jar:0.0.1-SNAPSHOT
[INFO] +- com.mybusiness.myproject:myproject-commons:jar:0.0.1-SNAPSHOT:compile
[INFO] |  \- com.mybusiness.myproject:myproject-core:jar:0.0.1-SNAPSHOT:compile
[INFO] |     \- com.mybusiness.myproject:myproject-core-commons:jar:0.0.1-SNAPSHOT:compile
[INFO] +- com.mybusiness.myproject:myproject-api:jar:0.0.1-SNAPSHOT:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.4:compile (version managed from 2.4.6)
[INFO] |  \- com.mybusiness.myproject:myproject-framework:jar:0.0.1-SNAPSHOT:compile
[INFO] |     +- org.springframework.boot:spring-boot-starter-security:jar:1.2.1.RELEASE:compile (version managed from 1.2.5.RELEASE)
[INFO] |     +- mysql:mysql-connector-Java:jar:5.1.34:compile (version managed from 5.1.35)
[INFO] |     +- com.mybusiness.framework:despegar-fwk-logging:jar:1.4.148:compile
[INFO] |     +- org.jenkins-ci.plugins:testInProgress-client:jar:1.4:compile
[INFO] |     |  \- org.json:json:jar:20140107:compile
[INFO] |     +- commons-io:commons-io:jar:1.3.2:compile
[INFO] |     \- org.Apache.commons:commons-lang3:jar:3.4:compile
[INFO] +- com.mybusiness.myproject:myproject-user-manage-domain:jar:0.0.1-SNAPSHOT:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:1.2.1.RELEASE:compile
[INFO] |  |  +- org.aspectj:aspectjrt:jar:1.8.4:compile (version managed from 1.8.2)
[INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.8.4:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.2.1.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.2.1.RELEASE:compile
[INFO] |  |  |  +- org.springframework:spring-jdbc:jar:4.1.4.RELEASE:compile
[INFO] |  |  |  \- org.springframework:spring-tx:jar:4.1.4.RELEASE:compile
[INFO] |  |  +- org.hibernate:hibernate-entitymanager:jar:4.3.7.Final:compile
[INFO] |  |  |  +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
[INFO] |  |  |  +- org.hibernate:hibernate-core:jar:4.3.7.Final:compile
[INFO] |  |  |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  |  |  \- org.jboss:jandex:jar:1.1.0.Final:compile
[INFO] |  |  |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  |  |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile
[INFO] |  |  |  \- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |  |  +- javax.transaction:javax.transaction-api:jar:1.2:compile
[INFO] |  |  +- org.springframework:spring-orm:jar:4.1.4.RELEASE:compile (version managed from 4.0.7.RELEASE)
[INFO] |  |  +- org.springframework.data:spring-data-jpa:jar:1.7.1.RELEASE:compile
[INFO] |  |  |  \- org.springframework.data:spring-data-commons:jar:1.9.1.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-aspects:jar:4.1.4.RELEASE:compile
[INFO] |  +- org.springframework.security:spring-security-jwt:jar:1.0.2.RELEASE:compile (version managed from 1.0.3.RELEASE)
[INFO] |  |  \- org.bouncycastle:bcpkix-jdk15on:jar:1.47:compile
[INFO] |  |     \- org.bouncycastle:bcprov-jdk15on:jar:1.47:compile
[INFO] |  \- org.flywaydb:flyway-core:jar:3.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.2.1.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:1.2.1.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:1.2.1.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.2.1.RELEASE:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.14:runtime
[INFO] |  +- org.springframework.boot:spring-boot-starter-Tomcat:jar:1.2.1.RELEASE:compile
[INFO] |  |  +- org.Apache.Tomcat.embed:Tomcat-embed-core:jar:8.0.15:compile
[INFO] |  |  +- org.Apache.Tomcat.embed:Tomcat-embed-el:jar:8.0.15:compile
[INFO] |  |  +- org.Apache.Tomcat.embed:Tomcat-embed-logging-juli:jar:8.0.15:compile
[INFO] |  |  \- org.Apache.Tomcat.embed:Tomcat-embed-websocket:jar:8.0.15:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.4.4:compile
[INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.4.4:compile
[INFO] |  +- org.hibernate:hibernate-validator:jar:5.1.3.Final:compile
[INFO] |  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] |  |  \- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
[INFO] |  +- org.springframework:spring-core:jar:4.1.4.RELEASE:compile
[INFO] |  +- org.springframework:spring-web:jar:4.1.4.RELEASE:compile
[INFO] |  \- org.springframework:spring-webmvc:jar:4.1.4.RELEASE:compile
[INFO] |     \- org.springframework:spring-expression:jar:4.1.4.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:1.2.1.RELEASE:compile
[INFO] |  \- org.springframework.boot:spring-boot-actuator:jar:1.2.1.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.2.1.RELEASE:test (scope not updated to compile)
[INFO] |  +- junit:junit:jar:4.12:test
[INFO] |  +- org.mockito:mockito-core:jar:1.10.8:test
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO] |  \- org.springframework:spring-test:jar:4.1.4.RELEASE:test
[INFO] +- org.springframework.boot:spring-boot-starter-log4j:jar:1.2.1.RELEASE:compile
[INFO] |  +- org.slf4j:jcl-over-slf4j:jar:1.7.8:compile (version managed from 1.7.7)
[INFO] |  +- org.slf4j:jul-to-slf4j:jar:1.7.8:compile
[INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.8:compile
[INFO] |  \- log4j:log4j:jar:1.2.17:compile
[INFO] +- org.springframework.security.oauth:spring-security-oauth2:jar:2.0.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-beans:jar:4.1.4.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:4.1.4.RELEASE:compile
[INFO] |  +- org.springframework.security:spring-security-core:jar:3.2.5.RELEASE:compile
[INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- org.springframework.security:spring-security-config:jar:3.2.5.RELEASE:compile
[INFO] |  +- org.springframework.security:spring-security-web:jar:3.2.5.RELEASE:compile
[INFO] |  +- commons-codec:commons-codec:jar:1.6:compile
[INFO] |  \- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] |     \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] +- org.springframework.hateoas:spring-hateoas:jar:0.16.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:4.1.4.RELEASE:compile (version managed from 3.2.9.RELEASE)
[INFO] |  +- org.objenesis:objenesis:jar:2.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.8:compile (version managed from 1.7.7)
[INFO] +- com.zaxxer:HikariCP:jar:2.2.5:compile
[INFO] |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] +- ma.glasnost.orika:orika-core:jar:1.4.5:compile
[INFO] |  +- com.thoughtworks.paranamer:paranamer:jar:2.3:compile
[INFO] |  +- com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.2_jdk5:compile
[INFO] |  \- com.carrotsearch:Java-sizeof:jar:0.0.4:compile
[INFO] +- io.springfox:springfox-swagger2:jar:2.1.1:compile
[INFO] |  +- org.mapstruct:mapstruct:jar:1.0.0.Beta4:compile
[INFO] |  +- io.swagger:swagger-annotations:jar:1.5.0:compile
[INFO] |  +- io.swagger:swagger-models:jar:1.5.0:compile
[INFO] |  +- io.springfox:springfox-spi:jar:2.1.1:compile
[INFO] |  |  \- io.springfox:springfox-core:jar:2.1.1:compile
[INFO] |  +- io.springfox:springfox-schema:jar:2.1.1:compile
[INFO] |  +- io.springfox:springfox-swagger-common:jar:2.1.1:compile
[INFO] |  +- io.springfox:springfox-spring-web:jar:2.1.1:compile
[INFO] |  +- com.google.guava:guava:jar:18.0:compile
[INFO] |  +- com.fasterxml:classmate:jar:1.2.0:compile
[INFO] |  +- joda-time:joda-time:jar:2.5:compile
[INFO] |  +- org.springframework.plugin:spring-plugin-core:jar:1.2.0.RELEASE:compile
[INFO] |  \- org.springframework.plugin:spring-plugin-metadata:jar:1.2.0.RELEASE:compile
[INFO] \- io.springfox:springfox-swagger-ui:jar:2.1.1:compile

Donc, HikariCP est définitivement dans le classpath et Tomcat-jdbc ne l’est pas. Mais lorsque je lance le service, autoconfig crée toujours org.Apache.Tomcat.jdbc.pool.DataSource au lieu d'un HikariCP.

Qu'est ce que je fais mal?


MODIFIER

Ceci est mon lanceur d'applications:

@SpringBootApplication
@EnableHypermediaSupport(type = {HypermediaType.HAL})
public class ApplicationRunner {

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

}
10
jscherman

Edit: Cette réponse donne le moyen de configurer Hikari dans Spring standard, également valable pour Boot. Toutefois, Boot ayant ajouté une intégration améliorée pour Hikari depuis que je l'ai écrit, les réponses telles que ceci pourraient être valides et plus appropriées pour Boot. 

Fournissez simplement la source de données dans une classe @Configuration:

@Configuration
public class HikariCPConfig {

    @Value("${hikari.driverclassname}")
    private String driverClassName;

    @Value("${hikari.jdbc.url}")
    private String jdbcUrl;

    @Value("${hikari.username}")
    private String userName;

    @Value("${hikari.password}")
    private String password;

    @Value("${hikari.pool.size}")
    private int poolSize;

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(poolSize);
        ds.setDriverClassName(driverClassName);
        ds.setJdbcUrl(jdbcUrl);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }

}

Ensuite, dans le fichier application.properties, déclarez vos propriétés pour la source de données, qui peuvent être fournies par la construction maven:

#Hikari
hikari.driverclassname = com.mysql.jdbc.Driver
hikari.jdbc.url = jdbc:mysql://localhost:3306/my_db
hikari.username = ${db.username}
hikari.password = ${db.password}
hikari.pool.size = 5

Ensuite, vous aurez besoin de Spring pour analyser votre classe HikariCPConfig, mais si vous utilisez @SpringBootApplication, ce qui équivaut à @Configuration@EnableAutoConfiguration et @ComponentScan, cela ne devrait pas poser de problème.

Voir aussi:

5
Xtreme Biker
  • Inclure Hikari dans votre pom
  • Ajoutez la propriété suivante à votre application.yml

    spring:
      datasource:
        type: com.zaxxer.hikari.HikariDataSource
        ...
    
18
Ben

spring.datasource.type commence par spring boot 1.3.0, donc cela ne fonctionnera pas sur 1.2.5

1
martian