2016-11-20 9 views
1

Ich habe eine Spring Boot-Anwendung mit zwei Profilen: 'dev' und 'prod'. In 'dev' Profil sollte H2-Datenbank verwendet werden, in 'prod' - PostgreSQL.Probleme beim Definieren von Profilen in pom.xml (Spring Boot)

Sie sind in pom.xml wie folgt definiert:

<profiles> 
     <profile> 
      <id>prod</id> 
      <dependencies> 
       <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
        <scope>provided</scope> 
       </dependency> 

       <dependency> 
        <groupId>org.postgresql</groupId> 
        <artifactId>postgresql</artifactId> 
        <version>9.4.1211.jre7</version> 
       </dependency> 

      </dependencies> 
     </profile> 

     <profile> 
      <id>dev</id> 
      <dependencies> 
       <dependency> 
        <groupId>com.h2database</groupId> 
        <artifactId>h2</artifactId> 
       </dependency> 
      </dependencies> 
     </profile> 
</profiles> 

Keine anderen Datenbanken werden in pom.xml definiert.

In meinem application.properties Datei 'prod' Profil als aktiv definiert:

spring.profiles.active = prod 

Auch ich habe zwei spezielle Eigenschaften Dateien für jedes Profil:

application-dev.properties:

spring.jpa.show-sql = true 

und application-prod.properties (ich meine App AWS einsetzen):

spring.datasource.url = jdbc:postgresql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME} 
spring.datasource.username = ${RDS_USERNAME} 
spring.datasource.password = ${RDS_PASSWORD} 
spring.jpa.hibernate.ddl-auto = update 

Ich beginne meine IntelliJ IDEA mit folgenden VM-Option:

-Dspring.profiles.active="dev" 

Wenn ich das Programm vor Ort zu starten, ich sehe, dass ‚dev‘ Profil verwendet wird (es gibt Meldung in der Konsole „Folgende Profile sind aktiv : dev "), aber H2 startet nicht. Ich werde folgende Fehlermeldung:

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Cannot determine embedded database driver class for database type NONE 

Action: 

     If you want an embedded database please put a supported one on the classpath. 
    If you have database settings to be loaded from a particular profile you may need 
to active it (the profiles "dev" are currently active). 

Bitte helfen Sie mir, diese Profile richtig zu definieren.

Antwort

1

Cannot determine embedded database driver class for database type NONE

spring.datasource.url = jdbc:h2:mem:yourDB 
spring.datasource.driverClassName = org.h2.Driver 

in application-dev.properties Datei hinzugefügt sollte Ihr Problem lösen.

Von Spring Boot documentation, kann es in einigen Fällen erforderlich sein:

You often won’t need to specify the driver-class-name since Spring boot can deduce it for most databases from the url.

bearbeiten

Maven Profil ist nicht Boot-Profil Frühling.
, wenn Sie Ihr Projekt ausführen, ermöglichen auch das Maven Profil mit -P arg:

mvn spring-boot:run -Pdev -Dspring.profiles.active="dev" 

bearbeiten

Update für Produktion env Problembehandlung.

Warum die Version von postgresql von Spring in Abhängigkeit überschreiben?
Wie auch immer, die Version, die Sie von Postgresql-Treiber verwenden, hat nicht die org.postgresql.jdbc.Driver Klasse, sondern org.postgresql.Driver.
also festlegen, dass in der Eigenschaftendatei für prod config:

spring.datasource.driverClassName = org.postgresql.Driver 
+0

Es gibt die folgenden Fehler: java.lang.IllegalStateException: Kann nicht Treiberklasse laden: org.h2.Driver. Und in "org.h2.Driver" Teil 'h2.Driver' ist rot –

+0

Können Sie versuchen, Ihr Projekt außerhalb IntelliJ laufen? Sieht wie ein Nebeneffekt aus. Welche SpringBoot Version verwendest du? – davidxxx

+0

Ich verwende Spring Boot Version v1.4.1.RELEASE. Wie ich verstehe, fügt Maven einfach keine Datenbankabhängigkeit hinzu. –

Verwandte Themen