В моем весеннем проекте у меня в моем классе есть файл с именем 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), и сохранить эту новую конфигурацию в том же файле.
Кто-нибудь может указать направление для этого?
делает это?
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();
Пример загрузки реквизитов из файла. У нас есть тестовый конфигурационный файл с именем 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
У меня в моем классе есть файл с именем 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, у вас будет хороший шанс, что он будет сбит при перераспределении. Так что не кладите его туда.