2016-04-24 11 views
1

Hallo Ich bin neu in Maven im Allgemeinen, also möchte ich im Voraus entschuldigen, wenn ich etwas falsch mache.Zugriff auf Maven-Eigenschaften mit Spring

Ich habe ein Maven-Projekt mit Frühling, in dem ich auch auf eine MySQL-Datenbank zugreifen.
oft die MySQL-Datenbank nicht zugänglich ist, so verwende ich eine lokale Datenbank zum Testen, ich tausche zwischen den beiden durch Ändern des aktiven Profils.

stelle ich die Profile, indem dieses in meinem pom.xml setzen:

<profiles> 
     <profile> 
      <id>Local</id> 
      <dependencies> 
       <dependency> 
        <groupId>org.hsqldb</groupId> 
        <artifactId>hsqldb</artifactId> 
        <version>2.3.3</version> 
        <classifier>jdk5</classifier> 
       </dependency> 
      </dependencies> 
      <properties> 
       <jdbc.url>jdbc:hsqldb:file:databaseName</jdbc.url> 
       <jdbc.username>a</jdbc.username> 
       <jdbc.password></jdbc.password> 
       <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver> 
      </properties> 
     </profile> 
     <profile> 
      <id>MySQL</id> 
      <dependencies> 
       <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.1.38</version> 
       </dependency> 
      </dependencies> 
      <properties> 
       <jdbc.url>jdbc:mysql://mysql.website.ac.uk:3306</jdbc.url> 
       <jdbc.username>user</jdbc.username> 
       <jdbc.password>1234</jdbc.password> 
       <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver> 
      </properties> 
     </profile> 
    </profiles> 

Wenn ich versuche, um die Eigenschaften Variablen zum Beispiel $ durch den Zugriff auf {jdbc.url} sie auf die tatsächlichen Werte nicht konvertiert werden wie im Profil definiert und ich bekomme Fehler. Ich vermute, dass es etwas mit Spring Boot zu tun haben könnte.

+0

Haben Sie versucht, das Debuggen und die ausführliche Protokollierung zu aktivieren, um zu sehen, was passiert? – randominstanceOfLivingThing

+0

Nicht im Zusammenhang mit Ihrer Frage, aber es ist eine schlechte Idee, Ihre Datenbankeigenschaften in pom.xml festzulegen. Speichern Sie Ihren Code in einem externen VCS wie Github, Bitbucket, etc? – Everv0id

+0

Stellen Sie sicher, dass Sie das Projekt aktualisieren, nachdem Sie Änderungen an POM vorgenommen haben. – Priyamal

Antwort

0

Sie haben Eigenschaften im Profil angegeben, daher gibt es eine Problemumgehung. Anmerkungen wie @Value("${name}") verweisen auf externalisierte Konfiguration, z. aus application.yml. Sie sollten diese Datei verwenden, um die gewünschten Eigenschaften zu laden. @[email protected] lädt Eigenschaft von Ihrem maven-Profil.

jdbc: 
    url: @[email protected] 
    username: @[email protected] 
and so on... 

Dann sind diese Eigenschaften in Ihrem Code verfügbar.

+0

Es tut mir wirklich leid, aber ich bin wirklich neu in all dem. Ich verstehe deine Antwort nicht ganz. Hast du vor, einfach alle $ ([name]) durch @ [name] @ zu ersetzen? – sf298

+1

Nein. In diesem Fall sollten Sie in Ihren Ressourcen die Datei 'application.yml' angeben. Dann fügt maven Werte aus Ihrem Profil in diese Datei ein und durch diese Datei sind sie in Ihrem Code zugänglich.Bitte beachten Sie: [Spring Boot Externalized Konfiguration] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) –

+0

Dachte, jetzt scheint es um zu arbeiten !!!! Vielen Dank! – sf298

2

Abgesehen von dem spezifischen Sprint-Boot-Problem vermisse ich die maven resource filtering Konfiguration.

Maven-Eigenschaften werden nicht automatisch an Spring weitergegeben, es sei denn, Sie legen sie in separate Eigenschaftendateien, die dann im Frühjahr verwaltet werden müssen (normalerweise über PropertyPlaceholderConfigurer).

Aber ohne Maven Filterung auf Eigenschaften wandten sich nicht automatisch aufgelöst werden, in der Regel, wenn Sie sollten viele Elemente unter src/resources Ordner Tour nicht haben können Sie einfach zu filtern global mit

<resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
</resource> 

Und Ihre Eigenschaften Datei ersetzen Platzhalter mit maven-Werten.

Wenn auf der anderen Seite in Sie mehrere Ressourcen in src/main/resources haben, sollten Sie Dokumentation tiefer überprüfen binary files

Korruption zu vermeiden, denke ich, dass der Frühling Boot einfach automatisch alle Prozesse Einwickeln in Ihre Anwendungseigenschaftendateien.

+0

Ich hatte das tut mir leid, es ist einfach nicht im Schnipsel! – sf298

+0

hast du meinen Tag gerettet) – MeetJoeBlack

Verwandte Themen