Загрузить и сохранить свойства из файла

1

В моем весеннем проекте у меня в моем классе есть файл с именем database.properties со следующим содержимым:

jdbc.Classname=org.postgresql.Driver
jdbc.url=
jdbc.user=
jdbc.pass=
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=validate

У меня есть метод в одном из моих классов обслуживания, где я вручную экспортирую схему базы данных на сервер через спящий режим. Код этого метода в этот момент следующий:

public void create_tables(String maquina, String usuario, String senha) {
    Configuration config = new Configuration();
            SchemaExport schema = new SchemaExport(config);
            schema.create(true, true);
}

Я хочу загрузить свойства из файла database.properties в мою конфигурационную переменную, настроить значения, которые я передаю методу в этой переменной (url, user and pass), и сохранить эту новую конфигурацию в том же файле.

Кто-нибудь может указать направление для этого?

Теги:
hibernate
properties

3 ответа

1
Лучший ответ

делает это?

Properties props = new Properties();
FileInputStream fis = new FileInputStream( "database.properties" );
props.load( fis );
fis.close();

props.setProperty("jdbc.url", {{urlvalue}} );
props.setProperty("jdbc.user", {{user value}} );
props.setProperty("jdbc.pass", {{pass value}} );

FileOutputStream fos = new FileOutputStream( "database.properties" );
props.store( fos );
fos.close();
  • 0
    Таким образом, файл сохраняется в моем домашнем каталоге, а не обновляется в моем classpath. Другая проблема заключается в том, что URL-адрес сохраняется как jdbc \: postgresql \: // localhost \: 5432 / horario? CharSet \ = LATIN1 , а не jdbc: postgresql: localhost: 5432 / horario? Charset = LATIN1 . Не знаю, почему лишние.
  • 0
    команда store будет экранировать символы #,!, = и: с обратной косой чертой. На самом деле это правильная кодировка, см. Википедию, но вы можете не указывать их, если использование не является двусмысленным, а вещи, кажется, тоже разбираются. Я не знаю ни одного способа устранить автоматическое добавление обратной косой черты, но это должно быть только косметическим. После прочтения они должны быть устранены.
Показать ещё 1 комментарий
1

Пример загрузки реквизитов из файла. У нас есть тестовый конфигурационный файл с именем filename = conf.props Содержит:

key0=value0
key1=value1

Свойства загрузки следующего класса в приложении:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class LogProcessor {



    public void start(String fileName ) throws IOException {

        Properties prop = new Properties();
        FileInputStream fis = new FileInputStream(fileName);
        prop.load(fis);

        System.out.println (prop.getProperty("key0"));
    }
}

Как запустить:

public static void main(String[] args) {

        try {
            new LogProcessor().start();
        } catch (IOException e) {
            e.printStackTrace();
        }

Возвращаемое значение0

\|/73

1

У меня в моем классе есть файл с именем database.properties

Я хочу загрузить свойства из файла database.properties в мою конфигурационную переменную, настроить значения, которые я передаю методу в этой переменной (url, user and pass), и сохранить эту новую конфигурацию в том же файле.

Это, по крайней мере, сложно и, возможно, невозможно.

"Файл", который вы пытаетесь обновить, может вообще не быть файлом. Это может быть компонент большего JAR или ZIP файла. Это может быть кеш в памяти или на диске, который был загружен. Он мог (предположительно) быть зашифрован с использованием открытого/закрытого ключа... для которого у нас нет ключа "шифрования".

В дополнение к тому, что это сложно, это плохая идея. Предположим, что ваша служба развернута как WAR файл и что файл свойств доставляется в WAR. Вы изменяете свойства... и так далее. Затем по какой-то причине вы переводите WAR. Это перепишет вашу конфигурацию.

Если вы хотите, чтобы свойства конфигурации были обновляемыми, они не должны находиться в пути к классам. Поместите файл в отдельный каталог (за пределами дерева webapp...) и получите доступ к нему через путь к файлу или file: URL.


Я пытаюсь удалить путь к классам :, но я сталкиваюсь с ошибкой, вызванной: java.io.FileNotFoundException: ресурс класса path [database.properties] не может быть открыт, потому что он не существует

Похоже, вы используете (неправильный) относительный путь для файла свойств.

Скопируйте файл (скажем) "/tmp/database.properties", измените аннотацию на

    @PropertySource("/tmp/database.properties")

и посмотреть, работает ли это. Если да, то вы можете найти более подходящее место для хранения файла. Но, как я сказал выше, если вы попытаетесь обновить файл в своей папке webapp, у вас будет хороший шанс, что он будет сбит при перераспределении. Так что не кладите его туда.

  • 0
    Мне нужно загрузить и сохранить файл в classpath, потому что именно так я и получил доступ в своем классе конфигурации для Hibernate (используя аннотацию @PropertySource ("classpath: database.properties") . Я пытаюсь удалить classpath:, но я сталкиваюсь с ошибкой, вызванной: java.io.FileNotFoundException: ресурс пути к классу [database.properties] не может быть открыт, потому что он не существует

Ещё вопросы

Сообщество Overcoder
Наверх
Меню