簡體   English   中英

從屬性文件加載Spring屬性

[英]Spring properties loading from properties file

我希望這不是重復的,但是我找不到答案:

我有一個帶bean.xml的Java Spring應用程序:

...
<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="locations">
     <list>
       <value>classpath:app.properties</value>
       <value>classpath:app-dev-overrides.properties</value>
     </list>
  </property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
  <property name="properties" ref="config" />
</bean>
...

以及一個看起來像這樣的結構:

src/main/resources/
   beans.xml
   db-beans.xml
   app.properties
   app-dev-overrides.properties
   wrapper.conf
src/main/shell
   app.sh
   custom-script.sh
src/main/wrapper
   wrapper.so
   wrapper
   wrapper.jar

我使用帶有dist.xml的maven-assembly-plugin將其組裝為DIR,如下所示:

<id>dist</id>
<formats>
  <format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
  <dependencySet>
     <outputDirectory>lib</outputDirectory>
     <scope>runtime</scope>
  </dependencySet>
</dependencySets>
<fileSets>
<fileSet>
  <!--Get the generated application jar-->
  <directory>${project.build.directory}</directory>
  <outputDirectory>./</outputDirectory>
  <includes>
    <include>*.jar</include>
  </includes>
</fileSet>
<fileSet>
  <!--Get application prod resources (generally bean XMLs and properties files)-->
  <directory>src/main/resources</directory>
  <excludes>
    <exclude>app-dev-overrides.properties</exclude>
  </excludes>
  <outputDirectory>conf</outputDirectory>
</fileSet>
<fileSet>
  <directory>src/main/shell</directory>
  <outputDirectory>./</outputDirectory>         
  <lineEnding>unix</lineEnding>
  <directoryMode>0755</directoryMode>
</fileSet>
<fileSet>
  <directory>src/main/wrapper</directory>
  <outputDirectory>./bin/</outputDirectory>
  <includes>
    <include>libwrapper.so</include>
    <include>wrapper</include>
  </includes>      
</fileSet>

與相關的pom:

  <plugins>      
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.6</version>
      <configuration>
         <finalName>my-app-test</finalName>  
         <archive>
           <manifest>
             <addClasspath>true</addClasspath>
             <mainClass>com.test.myapp.Main</mainClass>
             <classpathPrefix>lib</classpathPrefix>
           </manifest>
           <manifestEntries>
             <Class-Path>conf/</Class-Path>
           </manifestEntries>            
         </archive>
       </configuration>
     </plugin>
     <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.5</version>
        <configuration>
          <descriptors>
           <descriptor>${project.basedir}/src/main/assembly/dist.xml</descriptor>
          </descriptors>
         <finalName>dist</finalName>
         <appendAssemblyId>false</appendAssemblyId>
       </configuration>
       <executions>
         <execution>
           <phase>package</phase>
           <goals>
             <goal>directory</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>

這樣做的目的是要得到結構:

dist/
   bin/"Java Service Wrapper Stuff"
   conf/"Properties and XML"
   lib/"Libraries"
   myApp.sh (java service wrapper shell)
   myApp.jar (target built jar)

到目前為止,這對我來說還算不錯,除了屬性和XML文件似乎捆綁在JAR內並且更改重新啟動的conf / app.properties對生產服務器沒有影響之外,

那么,如何在啟動時加載配置而不是將其捆綁在JAR中來實現所需的dist結構?

您是否正在編寫用於執行JAR文件的腳本? 您可以在執行JAR文件時,通過從Classpath的conf文件夾中添加兩個文件來輕松實現此目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM