我正在编写一个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
到目前为止,我的试验是为了解决这个问题。
假设我有两个环境。 所以我将有两组不同的commcfg.properties
值我创建了如下文件 commcfg.DEV.properties commcfg.PROD.properties,以便它们在classpath
中接下来,我编写了代码,以便获取特定属性 文件取决于环境并将其重命名为commcfg.properties(作为 代理jar及其辅助程序依赖的运行时jar需要确切的名称 commcfg.properties)。
在我的本地工作区,我可以做到这一点。 但是当部署(我们使用docker)被打包到spring boot jar中时。
所以我的hack无法运行,因为我们无法在jar中重命名文件。
我的另一个想法是:
在我调用我的功能代码之前,我将把commcfg.properties放入 类路径(project / src / main / resources) 我将阅读它并根据环境需要修改值。 我将在application.properties中使用它们的值。 但我再次怀疑在jar中我无法修改文件。
希望我很清楚 请帮帮我..
答案 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中的属性。