如何在spring boot jar中修改属性文件

时间:2017-04-20 12:08:41

标签: java spring maven spring-boot jar

我正在编写一个Spring Boot应用程序。 此应用程序通过MessageQueues

与主框架通信

因此,为了与该MainFrame交谈,我们提供了一个java jar(其代码与MessageQueues对话)。我们称之为代理jar。

我们必须使用从上面提到的代理jar编写的操作。 我们不会在我们的应用程序中编写任何代码来读取/写入MessageQueues(IBM MessageQueues),这是由代理jar及其相关的运行时jar来完成的。

所以问题来了,这个代理jar的编码方式是它在类路径中查找名为'commcfg.properties'的文件(期望名称完全相同)。实际上,代理jar使用另一个依赖jar(允许调用运行时jar),它从commcfg.properties读取队列详细信息并从消息队列中读取/写入。

commcfg.properties具有MessageQueue的值以及这些队列的主机和端口。简而言之,队列详情。

所以问题是这些MessageQueue细节会在不同的环境中有所不同。我需要根据环境使用commcfg.properties

到目前为止,我的试验是为了解决这个问题。

  1. 假设我有两个环境。 所以我将有两组不同的commcfg.properties

    我创建了如下文件 commcfg.DEV.properties commcfg.PROD.properties,以便它们在classpath

    接下来,我编写了代码,以便获取特定属性 文件取决于环境并将其重命名为commcfg.properties(作为 代理jar及其辅助程序依赖的运行时jar需要确切的名称 commcfg.properties)。

    在我的本地工作区,我可以做到这一点。 但是当部署(我们使用docker)被打包到spring boot jar中时。

    所以我的hack无法运行,因为我们无法在jar中重命名文件。

  2. 我的另一个想法是:

    在我调用我的功能代码之前,我将把commcfg.properties放入 类路径(project / src / main / resources) 我将阅读它并根据环境需要修改值。 我将在application.properties中使用它们的值。 但我再次怀疑在jar中我无法修改文件。

  3. 希望我很清楚 请帮帮我..

2 个答案:

答案 0 :(得分:0)

在spring boot中,您可以使用Java注释@PropertySource

注册属性文件
@SpringBootApplication
@PropertySource("classpath:commcfg.properties")
public class ApplicationConfig
{

public static void main(String args[])
{
    SpringApplication.run(ApplicationConfig.class);
}

}

让commcfg.properties文件包含DEV环境详细信息

messageQueue.name=myMessageQueue
messageQueue.host=host
messageQueue.port=4040

现在构建您的jar文件,然后获得 yourjar.jar

现在在DEV环境中使用默认值

运行它
java -jar yourjar.jar 

在QA环境中运行它,并覆盖配置文件中的默认值

java -jar --messageQueue.name=diffrenthost --messageQueue.host=diffrenthost --messsageQueue.port=diffrentport yourjar.jar 

这样您就可以覆盖默认值。我希望这有帮助

答案 1 :(得分:0)

您可以将属性文件放在spring-boot jar的相同路径上,配置项可以覆盖jar中的属性。