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

我可以在Spring FileSystemResource中使用基于环境变量的位置吗?

管峻
2023-03-14
问题内容

我要求将所有属性文件存储在目录中。该目录的位置应存储在系统环境变量中。在我的应用程序上下文中,我将需要访问此环境变量以创建FileSystemResource
Bean。这是我通常会有的示例:

<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg>
                <value>myprops.properties</value>
            </constructor-arg>
        </bean>
    </property>
</bean>

相反,我需要让它像

<value>${prop_file_location}/myprops.properties</value>

其中prop文件的位置是环境变量。有人知道这样做的简单方法吗?

我正在使用Spring 2.5.6和Java 1.6


问题答案:

后来我们升级到了Spring 3.0.X,我们能够利用spring表达式语言。我们的方法从三个bean简化为以下代码段:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
        <value>classpath:defaults.properties</value>
        <value>file:/a/defined/location/project.properties</value>
        <value>file:${AN_ENV_CONFIGURED_DIR}/project.properties</value>
    </list>
  </property>

  <property name="ignoreResourceNotFound" value="true" />
  <property name="searchSystemEnvironment" value="true" />
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>

这使我们可以拥有一个静态已知的开发位置(第一个默认设置),或者具有通过env变量配置的部署位置。配置器按顺序处理这些操作(即,部署的优先级高于默认值)。

我最终采用了非编程方法。我使用了MethodInvoker来检索环境值。然后,我能够将其传递到FileSystemResource中。

<bean id="configPath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" >
    <property name="targetClass" value="java.lang.String" />
    <property name="staticMethod" value="java.lang.System.getenv" />
    <property name="arguments">
        <list>
            <value>NAME_OF_VARIABLE</value>
        </list>
    </property>
</bean>


 类似资料:
  • 问题内容: 我要求将所有属性文件存储在目录中。该目录的位置应存储在系统环境变量中。在我的应用程序上下文中,我将需要访问此环境变量以创建FileSystemResource Bean。这是我通常会有的示例: 相反,我需要让它像 其中prop文件的位置是环境变量。有人知道这样做的简单方法吗? 我正在使用Spring 2.5.6和Java 1.6 问题答案: 后来我们升级到了Spring 3.0.X,我

  • 问题内容: 所以我的Dockerfile是这样写的: 但是我想用 这样,我只需要在文件的一个位置写入用户名即可。但这是行不通的。 我该如何解决? 谢谢。 问题答案: 使用指令。根据文档: ARG指令定义了一个变量,用户可以在构建时使用docker build命令使用该标志,将其传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则构建会输出警告。 因此,您实际上可以像这样使用:

  • 问题内容: 我有一个Perl脚本,其中有一个类似的变量。我们可以将$ name的内容设置为可以导入其他文件并在其他文件中使用的环境变量吗? 我尝试过,但是这不起作用。 问题答案: 如果要影响您的进程或子进程的环境,请使用哈希: 如果要影响父进程的环境,则不会。至少没有父进程的合作。标准过程是发出shell脚本并让父进程执行该shell脚本: …并从shell(脚本)中调用该脚本为:

  • 问题内容: 我的crontab每小时运行一次。当用户从终端运行作业时,运行它的用户在工作中具有环境变量,但是,显然,crontab在运行时不会被环境变量吸收。 我尝试过将它们放入,但是它们似乎仍然没有被捡起。有谁知道我可以将crontab可以接收的环境变量放在哪里? 问题答案: 在运行命令之前,让’cron’运行一个设置环境的shell脚本。 总是。 〜/ bin / Cron中的脚本都是指向单个

  • 问题内容: 需要基于构建环境配置来设置标签的href值。 例如: 分期应有 产品应具有 当前设置: 生成命令: .env.staging.js: index.html: 在index.html中,这似乎不起作用。虽然类似的设置适用于JS文件 (可能是因为将JS文件解析并捆绑到一个文件中,并且捆绑程序在该时间点读取值) 尝试过的事情: index.html: (类似于PUBLIC_URL变量) 与浏

  • 我有一个Spring Boot应用程序,它将在各种环境中运行,根据它运行的环境,它将连接到不同的数据库。我有几个文件,每个环境都有一个,如下所示: : : 在我的每个环境中,我都有一个名为的环境变量,它被设置为它所处的环境类型,例如或(文件的名称与环境名称完全匹配)。 如何让spring boot读取这个环境变量并自动选择正确的文件?我不想因为这个包的部署方式(它不会作为jar运行)而不得不执行整