1

我正在编写一个小型 UnitTest 以确保我的属性回退机制按预期工作。我的想法是,以编程方式在文件系统的某处创建一个属性文件,然后让 Spring 访问该文件以从此时加载道具。

问题是,即使它存在,spring 也看不到/读取文件(Windows 资源管理器显示并打开文件)

创建的文件:

try {
        // Create temp file.
        // File file = File.createTempFile("temp", ".properties");
        File file = new File("C:/temp/temp.properties");

        // den aktuellen Pfad in eine Umgebungsvariable setzen, damit sie von der SpringConfig ausgelesen werden kann.
        System.out.println(file.getAbsolutePath());
        System.setProperty("tempPropsFilename", file.getAbsolutePath());

        // Delete temp file when program exits.
        file.deleteOnExit();

弹簧配置

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <!-- Die Position der Datei in der Liste ist wichtig. Die letzte überschreibt 
            die erste (natürlich nur die props, die in beiden enthalten sind) -->
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <array>
                <value>${tempPropsFilename}</value>
            </array>
        </property>
    </bean>

来自 Spring 的错误消息

    06-07@09:45:48 [main  ] INFO  (                 PropertiesLoaderSupport.java:177) config.PropertyPlaceholderConfigurer     - Loading properties file from class path resource [C:/temp/temp.properties]
06-07@09:45:48 [main  ] WARN  (                 PropertiesLoaderSupport.java:200) config.PropertyPlaceholderConfigurer     - Could not load properties from class path resource [C:/temp/temp.properties]: class path resource [C:/temp/temp.properties] cannot be opened because it does not exist
4

2 回答 2

1

尝试使用

<property name="location" value="file:/${tempPropsFilename}"/>

它应该使 Spring 在文件系统中搜索而不是类路径。

资源文档

于 2013-06-07T09:32:27.853 回答
0

据我记得, File(path) 创建文件的抽象表示 - 它不会向光盘写入任何内容

如果删除 file.deleteOnExit() 文件是否存在于光盘上?

尝试写入文件 - 我认为这会将其提交到光盘。

于 2013-06-07T08:16:44.470 回答