【问题标题】:Using an external .cfg file instead of defining Property files at build time使用外部 .cfg 文件而不是在构建时定义属性文件
【发布时间】:2013-06-13 19:19:30
【问题描述】:

我们的项目正在使用带有 FuseESB 的 Apache Camel,我们也在使用 Spring。现在我们有一些我们在构建项目时定义的属性文件(使用 Maven)。

我们希望将属性文件移动到每个系统上的外部文件 (dev/qa/prod) 并将其用作属性文件。

我正试图弄清楚我将如何做到这一点。 当然还有更多,但这与我相信的问题有关。 我正在查看Camel documentation,但我仍然对如何处理这件事有点困惑。

我在这个问题上查看了这个post,似乎我想在我的 Spring xml 文件中使用这种类型的配置。

我只需要一些一般性的指导, 谢谢!

【问题讨论】:

  • 我想我可以分享一些这方面的经验,但首先我想问一下——你在你的项目中使用blueprint.xml吗?否则你如何配置你的骆驼路线。
  • 我们正在使用蓝图,我们将其命名为 camel-context.xml,但其中包含 。它所做的只是创建一个控制器 bean 并将其导出到服务注册表(根据 cmets)。编辑了主要帖子并添加了它。

标签: java spring properties apache-camel fuseesb


【解决方案1】:

对于外部配置,您希望查看 OSGI cm 属性占位符;

有一些关于这个here的信息

要覆盖在您的 cm:property-placeholder 块中定义的默认属性,您需要提供一个外部文件,该文件与您提供的具有“.cfg”文件类型的唯一持久标识属性值相匹配。

例如,如果您想部署到 Karaf;然后这个配置将被放入 ${KARAF_HOME}/etc/yourPID.cfg

Spring DM 和 Blueprint 都提供此功能

【讨论】:

  • 这会替换 spring xml 文件中的 propertyplaceholder -- 我现在应该删除该部分吗?
  • 您可以在以下线程中查看我的答案。有一个非常详细的例子。它使用 Spring DM 进行属性加载(执行此操作的简单方法)。此解决方案将使用 OSGi 中的属性扩展您的 PropertyPlaceHolder。 stackoverflow.com/questions/16984812/….
  • @envinyater 另请查看 Spring-DM static.springsource.org/osgi/docs/1.2.x/reference/html/… 的此链接 - 但如果可能,请尝试使用蓝图 :)
【解决方案2】:

您还可以查看设置Fuse Fabric

结构中的每个服务器(容器)都配置有指定的配置文件,而不是手动编辑 .cfg 文件。例如,myprofile-devmyprofile-qamyprofile-prod

这会将结构配置文件中的属性(例如 foo=bar)插入到 cm 属性占位符中,您的蓝图配置将与 AlanFoster 在他的回答中描述的大部分相同。

这里有一些关于Fabric Profiles的信息。

特别是如果您运行许多服务器和环境,结构配置文件可能是管理部署和配置的好方法。

请注意,我不完全确定这如何解决您的 spring vs blueprint 问题。我选择完全取消 Spring,将所有 DI 和 bean 移入蓝图中,避免 spring 与蓝图冲突,并将属性配置完全保留在蓝图中。

我不确定您是否要取消 spring - 也许您更愿意保留它,在这种情况下,我可以建议查看 桥接 Spring 和 Camel 财产持有人部分在此链接的页面底部向下:Camel: Using Property Placeholder(我自己还没有尝试过,ymmv)。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2017-01-21
    • 2013-09-23
    相关资源
    最近更新 更多