2016-09-19 1 views
1

INTRO:configuration rpm pour Externalisée

Cette question est assez similaire à How to put a directory first on the classpath with Spring Boot? et je l'ai cherché un peu autour, mais malheureusement rien n'a fonctionné jusqu'à présent. Aucun changement à packaging=ZIP dans le spring-boot-maven-plugin ni en utilisant loader.path comme expliqué dans boot features external config ou how to - properties and configuration, donc je dois avoir raté quelque chose. Une dernière chose, si possible, je voudrais éviter de passer chaque fichier de configuration en argument avec file://....


J'ai une application qui était à l'origine un simulateur pour plusieurs types de services: sftp, du savon, etc. Dans un premier temps il a soutenu 1 instance de chaque type de serveur configurable via un fichier de propriétés.

Je l'ai maintenant mis à jour pour prendre en charge plusieurs instances de serveur sur des ports distincts, et la configuration est effectuée dans un fichier YAML, et j'ai également migré du printemps classique au démarrage. Enfin, l'application est livrée comme un RPM, qui a la structure suivante

installation-dir 
    |--bin 
    | '-- simulator.sh [lifecycle management script] 
    |--config 
    | |--application.properties 
    | |--log4j2.xml 
    | |--samples  [sample files for various operations] 
    | | |-- sample1.csv 
    | | |-- sample2.csv 
    | | '-- sample3.csv 
    | |--simulators.yaml [simulators config] 
    | '--simulator.jks 
    |--lib 
    | '-- simulator-1.0.jar 
    '--log 
     '-- simulator.log 

Avant, simulators.sh a lancé la classe principale ajoutant le config dir au classpath, et au printemps chargerait le fichier de propriétés sans aucun problème:

java <other args> -cp "..." com.whatever.SimulatorLauncher 

Depuis la migration, il lance maintenant le pot généré, de sorte que le pas -cp est plus utilisé, et je suis la difficulté à faire le ramasser les fichiers de configuration:

java <other args> lib/simulator-1.0.jar 

Ignorant un peu le fait qu'il ne trouve pas aplication.properties, la configuration de simulateurs est chargé comme ci-dessous:

@Configuration 
@ConfigurationProperties(locations = {"classpath:/simulators.yml"}, ignoreUnknownFields = false, prefix = "simulators") 
public class SimulatorSettings { 
    private static final Logger log = LoggerFactory.getLogger(SimulatorSettings.class); 

    @NotNull 
    private List<SftpSettings> sftp; 

    @NotNull 
    private List<SoapSettings> soap; 

Depuis la configuration doit être actualisable sans avoir à reconditionner l'application, tous les fichiers sont exclus du pot résultant, mais emballés dans le régime sous config:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <excludes> 
        <!-- these files will be included in the rpm under config --> 
        <exclude>application.properties</exclude> 
        <exclude>log4j2.xml</exclude> 
        <exclude>samples/**</exclude> 
        <exclude>simulators.yml</exclude> 
        <exclude>simulator.jks</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.whatever.SimulatorLauncher</mainClass> 
       <layout>ZIP</layout> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>rpm-maven-plugin</artifactId> 
      <version>2.1.5</version> 
      ... 
      <configuration> 
      ... 
        <mapping> 
         <directory>${rpm.app.home}/config</directory> 
         <sources> 
          <source> 
           <location>src/main/resources</location> 
           <includes> 
            <include>application.properties</include> 
            <include>simulators.yml</include> 
            <include>log4j2.xml</include> 
            <include>nls-sim.jks</include> 
           </includes> 
          </source> 
         </sources> 
         <filemode>755</filemode> 
        </mapping> 

Toute aide ou des conseils sont grandement appréciés.

Répondre

0

Je fini par enlever le spring-boot-maven-plugin pour empêcher le reconditionnement, et a créé le RPM avec mon artefact & ses dépendances et le lancement de l'application comme avant:

java <other args> -cp "<installation dir>/config:...:<libs>" com.whatever.SimulatorLauncher 

encore, je serais curieux de savoir si quelqu'un connaît une façon de le faire avec un bocal remballé de printemps ...