Spring和maven如何将属性文件放在jar外面?

时间:2015-06-27 20:07:20

标签: java spring maven logback

我正在使用Spring,Logback和maven。我想将我的所有设置都放在我用maven构建的jar之外的属性中。 所以我从Logback.xml移动了所有设置。现在看起来像:

<configuration>

    <property resource="application.properties" />

    <timestamp key="byDate" datePattern="yyyyMMdd"/>

    <!-- Send messages to System.out - CONSOLE -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
        </encoder>
        <withJansi>true</withJansi>
    </appender>

    <!-- Send messages to a file -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${logging.path}/${spring.application.name}-${byDate}.log</file>
        <append>true</append>
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="${logging.level}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

我的application.properties文件是:

#Spring settings
spring.application.name=MyApp
server.port=8087

# Logging settings
logging.level=INFO
logging.path=/Users/...some path.../logs/

我把它放到bean:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="file:application.properties"/>
    </bean>

并使用插件排除maven build的application.properties:

<plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <copy todir="target" overwrite="true">
                                    <fileset dir="src/main/resources/">
                                        <include name="*.properties"/>
                                    </fileset>
                                </copy>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

但它对我不起作用。日志文件名松散datePattern,我在属性文件中更改的内容没有变化。怎么了?请。

更新:没有错误。一切正常。我可以在IDE中运行来更改所有设置。所以我相信我对maven build做错了。

1 个答案:

答案 0 :(得分:1)

在你的maven antrun插件中,你正在复制application.properties,而不是移动,所以你的jar中总有一份application.properties! 尝试使用maven标准jar插件配置来排除属性文件:

$('.side-navbar').waypoint('sticky', {
  offset: '13%'
});

$(document).ready(function() {

     $(window).scroll(function() {
          var scrollVal = $(this).scrollTop();

    if ( scrollVal > ($(document).height() - $(window).height()) - 400) {
           $('.side_navbar').removeClass('stuck');            
       }   
   });

});

确保执行

时排除的文件位于应用程序类路径中