2017-04-20 125 views
0

我正在编写Spring Boot应用程序。 这个应用程序通过MessageQueues与主框架对话如何修改spring boot jar中的属性文件

因此,为了与该MainFrame对话,我们提供了一个java jar(它具有与MessageQueues对话的代码)。让我们称之为代理jar。

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

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

commcfg.properties具有MessageQueue的值和这些队列的主机和端口。总之队列细节。

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

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

  1. 可以说我有两种环境。 因此,我将有两个不同的组commcfg.properties值的

    我已经创建的文件如下 commcfg.DEV.properties commcfg.PROD.properties,这样他们将在classpath中

    接下来,我有书面代码,它将根据环境挑选特定的 文件并将其重命名为commcfg.properties(因为代理jar和其辅助程序相关的运行时jar需要确切名称为 commcfg.properties)。

    在我的本地工作空间中,我可以做到这一点。 但是,当部署(我们使用码头),被包装到弹簧引导罐。

    所以我的破解不起作用,因为我们不能用罐子重命名文件。

  2. 另一种认为我有:

    之前,我打电话给我的功能的代码,我会把commcfg.properties在 类路径(项目/ src目录/主/资源) 我会读它,修改值根据需要每个环境。 我将它们放在application.properties中。 但我再次怀疑在jar中我无法修改该文件。

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

+1

如果我正确理解了你的话:除了一个特定的属性文件(你不能使用Spring方法来使用Environment/class属性来配置你的应用程序),你不能使用其他任何东西吗?在这种情况下,唯一的解决办法是在你的类路径中提供你的commcfg.properties文件,但在你的jar之外(例如放置jar的根目录中的某处)。然后,您将此根目录添加到您的类路径中,以便您可以轻松修改它。 –

+0

只需添加@MikeWojtyna所说的,在这种情况下的一些常见方法是1.使用具有不同环境属性的Spring云配置服务器。 2.将属性文件放在jenkins中,并让jenkins在构建期间选择相应的文件 – pvpkiran

+0

谢谢@mike 和Kiran 您能否请指教如果我可以在Maven构建阶段对其进行调整? –

回答

0

春天开机,您可以注册您的属性与Java注释@PropertySource

@SpringBootApplication 
@PropertySource("classpath:commcfg.properties") 
public class ApplicationConfig 
{ 

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

}

文件,并让commcfg.properties文件包含开发环境的细节

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

现在建立你的jar文件,你会得到yourjar.jar

现在,在开发环境使用默认值,在您的配置文件

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

这种方式可以覆盖默认值覆盖缺省值运行

java -jar yourjar.jar 

在QA环境中运行它。我希望这可以帮助

+0

谢谢,但这不会解决我的问题。我早些时候试过这个解决方案。 我的spring引导应用程序不使用commcfg.properties文件(包含队列详细信息)。这些值由Spring弹簧引导所依赖的非Spring Java代码(代理jar)使用。 –

0

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