4

Java プロパティ ファイルから定数を取得することはできますか? アプリケーションが開発構成ファイルを使用するか本番構成ファイルを使用するかを指示するマスター プロパティ ファイルにフラグを設定できるように、アプリケーションを開発しようとしています。

ほとんどのアプリケーションは正常に動作しますが、エンティティ クラスのデータベース テーブル マッピングで少し壁にぶつかりました。Dynamo DB を使用しているため、実際のクラス自体には次のような注釈が必要です。

@DynamoDBTable(tableName = "table_name")
public class EmailTemplates {
...

tableName 値は定数である必要があり、次を使用してプロパティ ファイルから値を取得し、それを tableName に渡そうとしています。

@DynamoDBTable(tableName = DynamoTable.TABLE_NAME)
public class EmailTemplates {
...

DynamoTable クラス:

public final class DynamoTable {

    public static final String TABLE_NAME = ResourceBundle.getBundle(ResourceBundle.getBundle("ProjectStage").getString("ProjectStage")).getString("EmailTemplates");

}

残念ながら、値が定数ではないと言っているため、機能しません。単純にリテラル文字列 (つまり、「aStringValue」) を入力すると問題ありませんが、プロパティ ファイルからではありません。

注意。明確にするために、プロパティ ファイルから値を取得する上記のコードに問題はありません。問題は、定数として扱われていないことです。

4

2 に答える 2

7

やりたいことができない。

javac コンパイラに任意のコードを実行して、ディスクからプロパティ ファイルを読み取り、値を抽出し、それを定数としてコードに挿入するように要求しています (コンパイル時)。

ご覧のとおり、これはコンパイラが行うには少し大変です。

そのコードは実行時にのみ実行できます。これは、注釈に値を割り当てようとしているため、状況に適していません (したがって、注釈の値はコンパイル時に利用可能でなければなりません)。

于 2012-05-24T22:16:10.563 に答える
3

データベースのやり取りに DynamoDBMapper クラスを使用している場合、ロード、保存、削除、クエリ、およびスキャン用に追加の DynamoDBMapperConfig 引数を提供するオプションがあります。

実行時にこの構成を構築し、それを dynamoDB 操作に渡すことができます。

private DynamoDBMapperConfig getEnvironmentConfig(DymanoTable tableEntity, String environment)
{
    DynamoDBTable annotation = (DynamoDBTable) tableEntity.getClass().getAnnotation(DynamoDBTable.class);
    DynamoDBMapperConfig.TableNameOverride tableNameOverride = new DynamoDBMapperConfig.TableNameOverride(environment + annotation.tableName());
    return new DynamoDBMapperConfig(tableNameOverride);
}

DymnamoDBMapper を作成する必要があります...

AWSCredentials credentials = new PropertiesCredentials(
                ObjectPersistenceQueryScanExample.class.getResourceAsStream("AwsCredentials.properties"));

        client = new AmazonDynamoDBClient(credentials);
        DynamoDBMapper mapper = new DynamoDBMapper(client);

そして、これを dynamoDB インタラクションに使用します

public void save(DynamoTable entity)
{
    mapper.save(entity, getEnvironmentConfig(entity,"dev"));
}
于 2012-07-03T14:07:37.597 に答える