0

1 つのアプリケーションに対して 3 つの .properties ファイルがあります。各ファイルは、開発、テスト、および運用環境用です。これら 3 つのファイルを 1 つのファイルに結合することは可能ですか (そして実用的ですか)。どうすればそれができますか?それとも、各ファイルを独自の環境に保持するのが最善ですか? これがコードです。

enter code here
lock-timeout=7200000
usesLogin=true
uses-hardlocks=false
use-nested-roles=1

# Password Change URL for VSRD, VSRT and VSRP (in that order)
#pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange/default.asp
#pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange_tdl/default.asp
 pwchange-url=https://iteodova-md.fema.net/va-npsc/pwchange/default.asp

# Database Connectivity and User Session Management

jdbc-driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc-url=jdbc:oracle:thin:@wnli3d3.fema.net:1521:vsrd
#jdbc-url=jdbc:oracle:thin:@wnli3d2.fema.net:1521:vsrt
#jdbc-url=jdbc:oracle:thin:@mwli3d1.fema.net:1521:vsrp
 jdbc-url=jdbc:oracle:thin:@wnli3d4.fema.net:1521:vsrp
4

4 に答える 4

1

ApacheのCommonsConfiguration使用できます。

例えば:

CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new PropertiesConfiguration("color.properties");
config.addConfiguration(new PropertiesConfiguration("application.properties"));

または、次の例のように含めます。

# usergui.properties

include = colors.properties
include = sizes.properties
于 2012-08-28T12:54:50.730 に答える
0

プロパティを別々のファイル(つまり、テスト、ステージング、本番など)に保持することをお勧めします。それらの間の切り替えは、-Dオプションを指定してjavaを実行することで実行できます。

java -DpropertiesType=test ...

プロパティのオーバーロードとマージは、Springフレームワークで効果的に実行されます。

この例を見てください。

幸運を!

于 2012-08-28T13:09:10.743 に答える
0

プロパティを別々のファイルに保持するのが最善であるという考えに同意します。環境変数またはプロファイルを使用する場合(Springを使用している場合)、ファイルを「src / main/resources」内の独自のディレクトリに物理的に分離できます。次に、環境変数またはプロファイル設定に応じて、適切なものを読み取る必要があります。これをどのように行うかは、Javaスタックの詳細によって異なります。たとえば、SpringとJava Configを使用すると、次のようになります。

@Configuration
public class MyMainConfig {

    public MyMainConfig() {
        super();
    }

    @Configuration
    @Profile("dev")
    @PropertySource({ "classpath:/dev/myPropertyFileName.properties" })
    static class Dev
    {   }

    @Configuration
    @Profile("test")
    @PropertySource({ "classpath:/test/myPropertyFileName.properties" })
    static class Test
    {  }

    @Configuration
    @Profile("prod")
    @PropertySource({ "classpath:/prod/myPropertyFileName.properties" })
    static class Prod
    {    }
}
于 2012-08-28T14:02:42.033 に答える
0

このように、資格を使用してプロパティを使用できます。

次のコードでは、

key=value

今と同じようにデフォルト値として

key.ENVIRON=value

その環境で異なる必要がある場合。

ご覧のとおり、コードは非常に短く、すべてが 1 か所にあるため、さまざまな構成を簡単に比較できます。

複雑なシステムがある場合は、ENVIRON.TYPE.INSTANCE を使用してこのアプローチを拡張できます。

public class EnvironProperties extends Properties {
    private final String environ;

    public EnvironProperties(String environ) {
        this.environ = environ;
    }

    @Override
    public String getProperty(String key) {
        String property = super.getProperty(key + "." + environ);
        return property == null ? super.getProperty(key) : property;
    }

    public String getEnviron() {
        return environ;
    }

    public static void main(String... args) throws IOException {
        String properties = "lock-timeout=7200000\n" +
                "usesLogin=true\n" +
                "uses-hardlocks=false\n" +
                "use-nested-roles=1\n" +
                "\n" +
                "# Password Change URL for VSRD, VSRT and VSRP (in that order)\n" +
                "pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange/default.asp\n" +
                "pwchange-url.PROD=https://iteodova-md.fema.net/va-npsc/pwchange/default.asp\n" +
                "\n" +
                "# Database Connectivity and User Session Management\n" +
                "\n" +
                "jdbc-driverClassName=oracle.jdbc.driver.OracleDriver\n" +
                "jdbc-url.TEST=jdbc:oracle:thin:@wnli3d3.fema.net:1521:vsrd\n" +
                "jdbc-url.DEV=jdbc:oracle:thin:@wnli3d2.fema.net:1521:vsrt\n" +
                "jdbc-url.PROD=jdbc:oracle:thin:@mwli3d1.fema.net:1521:vsrp\n" +
                "jdbc-url=jdbc:oracle:thin:@wnli3d4.fema.net:1521:vsrp";

        EnvironProperties dev = new EnvironProperties("DEV");
        EnvironProperties test = new EnvironProperties("TEST");
        EnvironProperties prod = new EnvironProperties("PROD");

        for (EnvironProperties ep : new EnvironProperties[]{dev, test, prod}) {
            System.out.println("[" + ep.getEnviron() + "]");
            ep.load(new StringReader(properties));
            for (String prop : "uses-hardlocks,pwchange-url,jdbc-url".split(","))
                System.out.println(prop + "= " + ep.getProperty(prop));
        }
    }
}
于 2012-08-28T13:06:20.950 に答える