2012-05-24 2 views
3

Возможно ли получить постоянную форму файла свойств java? Я пытаюсь разработать мое приложение, чтобы установить флаг в файле основных свойств, который определяет, использует ли приложение конфигурационный файл разработки или производственный.Получить файл Constant from Properties?

Большая часть приложений работает отлично, но Ive ударил немного кирпичной стены с отображением таблицы базы данных в классах сущностей. Я использую Динамо DB так себя фактический класс требует аннотации следующим образом:

значения
@DynamoDBTable(tableName = "table_name") 
public class EmailTemplates { 
... 

имени таблицы должно быть постоянным, и я пытаюсь использовать следующие для извлечения значения из файла свойств и передать его к 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»), тогда она будет прекрасной, но не из файла свойств.

NB. Чтобы быть ясным, нет проблем с приведенным выше кодом, извлекающим значения из файла свойств. Проблема в том, что ее нельзя рассматривать как константу.

+0

Определение: "Не работает" – Jeffrey

+0

@Jeffrey К сожалению, Ive добавила проблему до конца сообщения. – tarka

+0

Вы говорите, что вам нужно определить разные файлы свойств для производства и разработки. Я не знаю, почему вам нужно создать переменную имени таблицы, разве есть отдельная производственная база данных и база данных разработки, возможно, вы играете со строкой соединения вместо изменения имени таблицы? –

ответ

6

Вы не можете делать то, что хотите.

Вы попросив JAVAC компилятор для выполнить произвольный код читать файл свойств с диска, извлекать значение, и вставить, что в качестве константы в коде (в время компиляции).

Как вы можете видеть, это немного для компилятора.

Вы можете только выполнить этот код на выполнении, который не сюиты вашей ситуации, потому что вы пытаетесь присвоить значение аннотации (и, следовательно, значение для аннотирования должно быть доступно в время компиляции).

+0

Я волновался, что это так, вернемся к чертежной доске ... Спасибо за быстрый ответ. – tarka

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")); 
} 
+0

Это довольно странно, как вы использовали для динамического определения имени таблицы. Я нашел ваше предложение полезно, но я решил таким образом, просто передавая 'Sting', содержащий имя_таблицы к TableNameOverride DynamoDBMapperConfig.TableNameOverride tableNameOverride = новый DynamoDBMapperConfig.TableNameOverride ( \t \t \t \t conf.getTableName()); – 0x41ndrea

Смежные вопросы