Comment obtenir le projet maven.la version de propriété, au Printemps de Démarrage de l'application avec un @de la Valeur de l'annotation?
Réponses
Trop de publicités?Après quelques recherches et essais sur la façon d'obtenir le projet maven version de Printemps de l'application de Démarrage, je ne pouvais pas trouver quelque chose de travailler pour moi.
À l'aide d'un manifeste est définitivement un mauvais chemin à cause de la classe chargeurs de questions, c'est à dire un seul obtient le premier manifeste du Printemps trouve, ce qui dans mon cas n'était pas l'une de mes applications.
Une solution que j'ai trouvé est d'utiliser le maven ressources plugin pour "filter" (remplacer) propriétés dans les fichiers de ressources. Dans ce cas, le Ressort application.properties
.
Ci-dessous sont les étapes pour faire ce travail.
Dans le pom, activer des ressources de filtrage avec la définition suivante:
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
Dans l' application.properties
le fichier:
application.name=@project.artifactId@
build.version=@project.version@
build.timestamp=@timestamp@
Avis de la @property@ au lieu de ${propriété}. dans l' application.properties
le fichier.
Le printemps-amorçage-starter-pom parent redéfinit le standard de ${} délimiteur comme @:
<resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
On peut ensuite accéder à ces propriétés au Printemps à l'aide de @Valeur comme ceci:
@Value("${application.name}")
private String applicationName;
@Value("${build.version}")
private String buildVersion;
@Value("${build.timestamp}")
private String buildTimestamp;
Pour obtenir l'accès à des propriétés Maven dans le Printemps de Démarrage de l'application , tous nous avons besoin est une carte avec séparateur @
dans la application.properties
comme ceci:
app.version=@project.version@
app.name=@project.name@
Ensuite les utiliser dans l'application comme d'ordinaire propriétés, par exemple:
@Service
public class SomeService {
@Value("${app.version}")
private String appVersion;
// other stuff
}
Source: Automatique Propriété D'Expansion À L'Aide De Maven
Mais si nous sommes à l'aide de yaml pour stocker les propriétés de l'application, nous devons remplacer le séparateur @
avec une autre, par exemple ^
notre pom.xml
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>^</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
Ensuite l'utiliser en application.yml
:
app:
version: ^project.version^
name: ^project.name^
C'est probablement parce que votre principal pom ne pas déclarer printemps-amorçage-starter-parent que son parent pom. Parce que quand donc, le filtrage se fait par défaut, sans avoir besoin de déclarer le filtrage explicitement
Pour moi, le passage à partir de :
<parent>
<groupId>com.mycompany</groupId>
<artifactId>mycompany-parent</artifactId>
<version>20</version>
</parent>
pour :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
Dans mon application principale pom.xml correction du problème sans avoir à déclarer le filtrage.