当前位置: 首页 > 面试题库 >

在多个项目/模块中使用多个属性文件(通过PropertyPlaceholderConfigurer)

仲孙阳
2023-03-14
问题内容

我们目前正在编写一个应用程序,该应用程序分为多个项目/模块。例如,让我们采用以下模块:

  • myApp-DAO
  • myApp-jabber

每个模块都有其自己的Spring上下文xml文件。对于DAO模块,我有一个PropertyPlaceholderConfigurer,它读取带有必需的数据库连接参数的属性文件。在jabber模块中,我还有一个用于jabber连接属性的PropertyPlaceHolderConfigurer。

现在出现了主要应用程序,其中包括myApp-DAO和myApp-
jabber。它读取所有上下文文件并启动一个大的Spring上下文。不幸的是,每个上下文似乎只能有一个PropertyPlaceholderConfigurer,因此,无论哪个模块首先被加载,都能够读取其连接参数。另一个引发异常,并显示诸如“无法解析占位符’jabber.host’”之类的错误。

我有点理解问题所在,但是我真的不知道解决方案-还是我的用例的最佳实践。

我将如何配置每个模块,以便每个模块都能加载自己的属性文件?现在,我已经将PropertyPlaceHolderConfigurer从单独的上下文文件中移出并将它们合并到主应用程序的上下文中(使用单个PropertyPlaceHolderConfigurer加载所有属性文件)。但是这很糟糕,因为现在使用dao模块的每个人都必须知道,他们需要在上下文中使用PropertyPlaceHolderConfigurer
..以及dao模块中的集成测试失败等。

我很想知道来自stackoverflow社区的html" target="_blank">解决方案/想法。


问题答案:

如果您确保在每个涉及的上下文中每个占位符都忽略了无法解析的密钥,那么这两种方法都会起作用。例如:

<context:property-placeholder
location="classpath:dao.properties,
          classpath:services.properties,
          classpath:user.properties"
ignore-unresolvable="true"/>

要么

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:dao.properties</value>
                <value>classpath:services.properties</value>
                <value>classpath:user.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>


 类似资料:
  • 调用配置 我在构造函数中得到了一个NullPointerException。

  • 我有一个多模块Spring引导梯度项目。我在每个模块yml文件中都有指向数据库的属性:user、pass、URL。 这是一个可行的解决方案,但很难改变项目数据库。每次我想切换数据库用户或url,我必须改变10+yml文件。 如何避免这一点?

  • 我有一个多模块的项目,有两个模块:war和ear模块。我正在尝试使用Maven发行版插件来管理发行版。 我的配置到目前为止... 父POM: war模块POM: ear模块POM: 正如您看到的表单日志,test-war-0.0.1-sources.jar正在上传两次。这是为什么?我怎样才能编辑我的配置,使它只上传一次?

  • 问题内容: 我将sql存储在属性文件中,并使用spring注入它,这有效: 但出于可读性,我想要这样: 我需要使用什么正确的文本格式? 问题答案: 在行的末尾使用\ 另外,请注意任何尾随空格,因为Java在组装线时会寻找连续的反斜杠+换行符。 换种说法:反斜线必须是换行符之前该行的最后一个字符。

  • MyApp和MyAppCore有自己的AppComponent,MyApp提供ViewModel工厂,MyAppCore提供数据库和网络访问工厂(下面的示例)。 我不确定如何链接AppComponent(或应用程序),以便在MyApp中提供数据库和网络访问。以下是我目前掌握的信息: MyAppCore模块 MyAppCore还具有名为的Room数据库实现和接口(我认为我不需要在这个问题中添加此代码