4

私は春にJavaを使用しています。

プロパティ ファイルにデータベース接続 URL が含まれているスタンドアロン アプリケーションがあります。

何らかの理由で、1 つのプロパティをオーバーライドしたい場合、プロパティを渡すことでプロパティをオーバーライドし、jvm オプションとして渡すことでその値をオーバーライドできる場所がいくつか表示されます。

java -Dcom.abc.project.model.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://abc-al01.abc.com/model_QA [executeablejar] myjavafile

誰かがそれがどのように機能するか説明できますか?

4

4 に答える 4

3

プロパティ ファイルからいくつかの db 関連データをロードしたいが、そのデータをシステム プロパティ データでオーバーライドする機能を実装したい場合、なぜこのようなことができないのでしょうか?

Properties prop = new Properties();

try {
    prop.load(new FileInputStream("config.properties"));

    String connUrl = prop.getProperty("com.abc.project.model.jdbc.ConnectionUrl");
    String theOtherConnUrl = System.getProperty("com.abc.project.model.jdbc.ConnectionUrl");

    if(theOtherConnUrl!=null){
        connUrl = theOtherConnUrl;
           ...

オーバーライドの動作は、プロパティ ファイルとシステム プロパティの両方からこのデータを取得するコードを実装する方法に依存すると思います。DB 関連のすべてのデータを単一のプロパティ ファイル (複数の接続データ) 内に残してはいけません。 jdbc.sqlserver.host と jdbc.oracle.host のように異なるパラメータ名で区切り、フラグを使用して、使用するデータを識別します (このフラグは、-Dcom.abc のようにシステム プロパティに配置できます)。 project.model.jdbc.db=sqlserver)。

于 2013-03-12T14:29:41.973 に答える
0

これが基本的な例です

context.xml

<context:property-placeholder location="/test.properties" system-properties-mode="OVERRIDE"/> 
<bean class="Test">
    <property name="xxx" value="${xxx}" />
</bean>

test.properties

xxx=1

Test.java

public class Test {

    public void setXxx(String xxx) {
        System.out.println(xxx);
    }

    public static void main(String[] args) throws Exception {
        new ClassPathXmlApplicationContext("context.xml");
    }
}

最初に、Testはtest.properties-から値を出力します1。ただし、-Dxxx = 2を指定してTestを実行すると、が出力され2ます。つまり、システムプロパティはファイルのプロパティを上書きします

于 2013-03-12T14:36:48.550 に答える
0

これを参照してください..Spring構成自体の問題を解決します..コードを変更する必要はありません

春のプレースホルダー形式

于 2013-05-28T06:19:19.220 に答える