1

プロパティのフォールバックメカニズムが期待どおりに機能することを確認するために、小さな UnitTest を作成しています。私の考えは、プログラムでファイルシステムのどこかにプロパティファイルを作成し、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 に答える