当前位置: 首页 > 知识库问答 >
问题:

Spring和maven如何将属性文件放在JAR之外?[副本]

谭卜鹰
2023-03-14

我正在使用Spring、Logback和Maven。我想把我的所有设置的属性,这将在jar之外,我用Maven构建。因此,我将所有设置从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>
#Spring settings
spring.application.name=MyApp
server.port=8087

# Logging settings
logging.level=INFO
logging.path=/Users/...some path.../logs/
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="file:application.properties"/>
    </bean>
<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>

更新:没有错误。一切都很好。我可以改变所有的设置与运行在IDE。所以我相信我在maven Build上做了一些错误的事情。

共有1个答案

柏高丽
2023-03-14

在您的maven antrun插件中,您正在执行application.properties的副本,而不是移动,因此在您的jar中总是有application.properties的副本!尝试使用maven标准jar插件配置来排除您的属性文件:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <excludes>
        <exclude>path/to/application.properties</exclude>
      </excludes>
    </configuration>
  </plugin>

并确保在执行时排除的文件在应用程序类路径中

 类似资料:
  • 问题内容: 在我的目标文件夹中,有2个文件夹,lib和conf。所有的属性文件都放在conf文件夹中,而jars放在lib foulder中。 在Spring Boot之前,我们在spring.xml中使用以下配置来使用@value 但是在spring启动中,我不知道如何在Java代码中执行相同的操作。 我尝试了以下操作,但是没有用 问题答案: 问题的标题和描述让我有些困惑。希望我不会再让你对我的

  • 问题内容: 我正在整理一个.jar文件。我想创建一个非常简单的.properties文件,其中包含诸如用户名和其他内容之类的可配置内容,以便他们可以手动编辑,而不必包括GUI编辑器。 我想做的是能够按此顺序搜索: 指定的属性文件() 当前目录(调用Java的目录)中的MyApp.properties 用户目录中的MyApp.properties(user.home系统属性?) 存储应用程序.jar

  • 问题内容: 我有一个JAR文件,我的所有代码都已存档以便运行。我必须访问一个属性文件,每次运行前都需要对其进行更改/编辑。我想将属性文件保留在JAR文件所在的目录中。无论如何,有没有告诉Java从该目录中提取属性文件? 注意:我不想将属性文件保留在主目录中或在命令行参数中传递属性文件的路径。 问题答案: 因此,你希望将与主/可运行jar相同文件夹中的文件视为文件,而不是作为主/可运行jar的资源。

  • 问题内容: 我们为我们的一个应用程序提供了一个连接池组件(JAR文件)。截至目前,应用程序连接详细信息捆绑在JAR文件中(在文件中)。 我们可以使其更通用吗?我们可以让客户端告诉属性文件详细信息(路径和文件名),然后使用JAR来获得连接吗? 客户端代码中包含以下内容是否有意义: 与此同时,客户端将指定(以某种方式???)属性文件详细信息,其中包含要连接的URL,超时等。 问题答案: http://

  • 问题内容: 有谁知道如何在Maven中读取文件。我知道有多种方法可以使用资源过滤来读取属性文件并从中设置值,但是我想要在中使用以下方法: 问题答案: 试用 Properties Maven插件

  • 我需要从spring boot war外部加载application.properties文件,该文件将部署在Tomcat中。 我试过各种解决方案,遗漏了一些东西 > 尝试在windows中设置环境变量,如下所示 尝试将上下文参数设置为tomcat,如下文所述,请回答https://stackoverflow.com/A/44697239/2751962 尝试在扩展SpringBootServle