Как получить данные из файла property
Перейти к содержимому

Как получить данные из файла property

  • автор:

Получение данных из application.properties

Пишу небольшое приложение по работе, и надо создать класс для использования его в RestController Но дело в том, что я никак не могу получить данные из файла application.properties. Пробовал разные способы, которые советовали в интернете, ничего не помогает Вот код класса, что я создал

package com.example.demo; import com.sas.cas.*; import com.sas.cas.actions.Castable; import com.sas.cas.actions.sessionProp.SetSessOptOptions; import com.sas.cas.actions.table.FetchOptions; import com.sas.cas.events.CASAuthenticatedUserEventListener; import com.sas.cas.events.CASSSLSocketEventListener; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.net.Socket; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; @Component public class CASRepository < //Параметры клиента CAS //String host = "sasserver.demo.sas.com"; //int port = 5570; //String username = "sasdemo"; //String password = "Orion123"; // boolean disablessl = true; //String table = "demo"; //String vars = "air,date"; final CASClient client = new CASClient(); @Value("$") private String host; @Value("$") int port; @Value("$") String username; @Value("$") String password; @Value("$") String table; @Value("$") String vars; @Value("$") String caslib; @Value("$") boolean disablessl; public CASRepository() < System.out.print(host); //Создание клиента CAS client.setHost(host); client.setPort(port); client.setUserName(username); client.setPassword(password); // client.setSessionID(sessionID); //client.setNumberOfNodes(1); //Устанавливаем caslib для текущей сессии CAS try < SetSessOptOptions options = new SetSessOptOptions(); options.clear(); options.setCaslib(caslib); client.invoke(options); >catch (CASException e) < e.printStackTrace(); >catch (IOException e) < e.printStackTrace(); >//Создаем UserEventListener client.setAuthenticatedUserEventListener(new CASAuthenticatedUserEventListener() < @Override public void handleAuthenticatedUserEvent(CASAuthenticatedUserInfo userInfo) < System.out.println("client.getHost() = " + client.getHost()); System.out.println("client.getPort() = " + client.getPort()); System.out.println("userInfo.getUsername() = " + userInfo.getUsername()); >>); //Если отключаем проверку протокола SSL и у нас еще нет EventListener, то создаем его if (disablessl && (client.getSSLSocketEventListener() == null)) < client.setSSLSocketEventListener(new CASSSLSocketEventListener() < @Override public void handleSocketConnectionEvent(CASClientInterface client, Socket socket) < >@Override public void handleSocketClosedEvent(CASClientInterface client, Socket socket) < >@Override public SSLSocketFactory handleSSLSocketCreationEvent(CASClientInterface client, Socket socket) throws IOException < SSLSocketFactory sf = null; // Trust all! TrustManager[] trustAllCerts = new TrustManager[]< new X509TrustManager() < public java.security.cert.X509Certificate[] getAcceptedIssuers() < return new X509Certificate[0]; >public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) < >public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) < >> >; // Install the all-trusting trust manager try < SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); sf = sc.getSocketFactory(); >catch (Exception ex) < throw new IOException(ex); >return sf; > >); > > //Get the whole table public List gettable() throws IOException, CASException < //создаем настройки выборки FetchOptions opt = new FetchOptions(); Castable tble = new Castable(); tble.setName(table); String[] vrs = getStringArrayProperty(vars); if (vrs != null) < tble.setParameter(Castable.KEY_VARS, vrs); >opt.setTable(tble); opt.setSasTypes(false); //выбираем данные CASActionResults results = client.invoke(opt); return dumpByRow((CASTable) results.getResult(0).getValue()); > private String[] getStringArrayProperty(String vrs) < String[] sa = null; String s = vrs; if (s != null) < sa = s.split(","); >return sa; > private List dumpByRow(CASTable t) throws IOException < int n = Math.min(100, t.getRowCount()); Listlist = new ArrayList<>(); row buffer = new row(); for(int row = 0; row return list; > //Change row in the table > 

Как получить данные из файла property

Я хочу получить доступ к значениям, указанным в application.properties , например:

Я хочу получить доступ к userBucket.path в моей основной программе в приложении Spring Boot.

21 ответ

Вы можете использовать аннотацию @Value и получить доступ к свойству в любом используемом вами компоненте Spring.

Раздел Внешняя конфигурация загрузки Spring docs, объясняет все детали, которые могут вам понадобиться.

Чтобы выбрать значения из файла свойств, у нас может быть класс чтения конфигурации, например ApplicationConfigReader.class. Затем определить все переменные по свойствам. См. Ниже пример,

Ниже приведен соответствующий класс читателя.

Теперь мы можем автоматически подключать класс считывателя везде, где мы хотим получить доступ к значениям свойств. например

Вы можете использовать @ConfigurationProperties, это просто и легко получить доступ к значению, определенному в application.properties

У меня тоже была эта пробема. Но есть очень простое решение. Просто объявите свою переменную в конструкторе.

Класс Session ServiceImpl:

Этот подход не использует аннотацию загрузки Spring. Традиционный способ обучения.

Используйте метод getProperty () для передачи ключа и доступа к значению в файле свойств.

Есть 2 способа получить доступ к значению из файла application.properties

  1. Использование аннотации @Value
  1. Использование экземпляра класса среды

Вы также можете ввести экземпляр среды с помощью инъекции конструктора или самостоятельно создать bean-компонент

  1. вы можете напрямую использовать @Value в своем классе
  1. Чтобы сделать его чистым, вы можете очистить класс @Configuration , куда вы можете добавить все свои @value

Лучше всего использовать аннотацию @Value , она автоматически присвоит значение вашему объекту private Environment en . Это уменьшит размер кода и упростит фильтрацию файлов.

Наилучшие способы получения значений свойств используются.

1. Использование аннотации значений

2. Использование компонента Environment

Для меня ничего из вышеперечисленного не помогло мне напрямую. Я сделал следующее:

В дополнение к ответу @Rodrigo Villalba Zayas я добавил
implements InitializingBean в класс
и реализовал метод

Так это будет выглядеть

Вы можете использовать аннотацию @Value для чтения значений из файла application.properties/yml.

Вы можете использовать @Value(«$») из application.properties, если ваш класс аннотирован @Configuration или @Component .

Есть еще один способ, который я опробовал, — это создать класс Utility для чтения свойств следующим образом:

Вы можете использовать статический метод, чтобы получить значение ключа, переданного в качестве параметра.

Spring-boot позволяет нам несколькими способами предоставлять внешние конфигурации, вы можете попробовать использовать файлы application.yml или yaml вместо файла свойств и предоставить различные настройки файлов свойств в соответствии с различными средами.

Мы можем разделить свойства для каждой среды в отдельные файлы yml в отдельных профилях Spring. Затем во время развертывания вы можете использовать:

Чтобы указать, какой профиль пружины использовать. Обратите внимание, что имена файлов yml должны быть такими, как

Для их автоматического захвата пружинным ботинком.

Чтобы прочитать из application.yml или файла свойств:

Самый простой способ прочитать значение из файла свойств или yml — использовать аннотацию spring @value. Spring автоматически загружает все значения из yml в среду Spring, поэтому мы можем напрямую использовать эти значения из окружающая среда как:

Или другой метод, который Spring предоставляет для чтения строго типизированных bean-компонентов, выглядит следующим образом:

Соответствующий POJO для чтения yml:

Вышеупомянутый метод хорошо работает с файлами yml.

Приложение может считывать 3 типа значений из файла application.properties.

Файл класса

Если у вас нет свойства в application.properties, вы можете использовать значение по умолчанию

Следуй этим шагам. 1: — создайте свой класс конфигурации, как показано ниже.

2: — когда у вас есть класс конфигурации, введите переменную из нужной конфигурации.

Вы можете использовать @Value для загрузки переменных из application.properties , если вы будете использовать это значение в одном месте, но если вам нужен более централизованный способ загрузки этих переменных, @ConfigurationProperties — лучший подход .

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

В настоящее время я знаю о следующих трех способах:

1. Аннотация @Value

  • По моему опыту, бывают ситуации, когда вы не может получить значение или установлено на null . Например, когда вы пытаетесь установить его в методе preConstruct() или init() . Это происходит потому, что внедрение значения происходит после того, как класс полностью построен. Поэтому лучше использовать третий вариант.

2. Аннотация @PropertySource

  • PropertySouce устанавливает значения из исходного файла свойств в переменной Environment (в вашем классе), когда класс загружается. Таким образом, вы можете легко получить послесловие.
    • Доступно через переменную системной среды.

    3. Аннотация @ConfigurationProperties .

      Это в основном используется в проектах Spring для загрузки свойств конфигурации.

    Он инициализирует сущность на основе данных о свойствах.

    • @ConfigurationProperties указывает файл свойств для загрузки.
    • @Configuration создает компонент на основе переменных файла конфигурации.

    Вы тоже можете это сделать .

    Затем, где бы вы ни хотели читать из application.properties, просто передайте ключ методу getConfigValue.

    @ConfigurationProperties может использоваться для отображения значений из .properties ( .yml также поддерживается) в POJO.

    Рассмотрим следующий пример файла.

    Теперь к значению свойств можно получить доступ путем автоматического подключения employeeProperties следующим образом.

    В наше время почти в каждом проекте используются различные статические файлы и данные, необходимые классам для безопасного и быстрого доступа. Примером таких конфигурационных файлов являются так называемые Файлы свойств, более известные как *.properties.

    Каждый параметр сохраняется парой двух переменных строчной типа, одна сохраняет имя параметра (так называемый ключ), а другой сохраняет значение. Каждая строка файла .properties, как правило, хранит значения одного параметра. Несколько форматов являются допустимыми для .properties, в том числе ключ = значение, ключ: значение и сам ключ.

    Например работы с .properties в Java

    Для начала подготовим среду для работы и создадим проект (Рисунок 1):

    1

    Теперь посмотрим на структуру созданного проекта (Рисунок 2):

    2

    Как видим, в папке Resources уже есть файл под названием config.properties. Вам нужно будет его создать вручную и наполнить данными, а именно (Рисунки 3-4):

    3

    4

    Далее прописываем необходимые ключи и значения, как на рисунке 5:

    5

    Пример обращения к файлу properties

    Ниже представлена программа, демонстрирующая обращение к нашему конфигурационному файлу:

    Большинству программ Java в какой-то момент необходимо использовать свойства, как правило, для хранения простых параметров в виде пар ключ-значение вне скомпилированного кода.

    В этой статье я покажу использование базового класса Properties, в том числе способы загрузки и сохранения в формате XML, как управлять парами ключ-значение в объекте свойств, например извлекать значения, обновлять, получить его размер и как использовать список по умолчанию для объекта.

    • Properties является подклассом Hashtable. Он используется для ведения списков значений, в которых ключ является строкой, а значение также является строкой.
    • Класс Properties используется многими другими классами Java. Например, это тип объекта, возвращаемый System.getProperties() при получении значений.
    • Одна полезная возможность класса состоит в том, что вы можете указать свойство по умолчанию, которое будет возвращаться, если никакое значение не связано с определенным ключом.
    • Несколько потоков могут совместно использовать один объект без необходимости внешней синхронизации.
    • Properties определяет переменную экземпляра.
    • Properties() создает объект Properties, который не имеет значений по умолчанию.
    • Properties (Properties propDefault): второй создает объект, который использует propDefault в качестве значения по умолчанию.

    Начнем с примера загрузки пар ключ-значение из файлов свойств; мы загружаем два файла, которые мы имеем в нашем classpath:

    Теперь мы можем очень просто загрузить их в экземпляр Properties:

    Если содержимое файла соответствует требованиям формата файла свойств, оно может быть правильно проанализировано классом Properties.

    Загрузка из файлов XML

    Помимо файлов, класс Properties также может загружать файлы XML, которые соответствуют определенным спецификациям DTD.

    Теперь давайте загрузим:

    Как получить свойства?

    Мы можем использовать getProperty (ключ String) и getProperty (ключ String, String defaultValue), чтобы получить значение по его ключу.

    Если пара ключ-значение существует, оба метода будут возвращать соответствующее значение. Но если такой пары ключ-значение не существует, первая вернет null, а вторая вместо нее вернет defaultValue.

    Обратите внимание, что хотя класс Properties наследует метод get() от класса Hashtable, я не рекомендую использовать его для получения значения. Поскольку его метод get() будет возвращать значение Object, которое может быть приведено только к String, а метод getProperty() уже обрабатывает значение Object правильно.

    Код ниже выдаст исключение:
    float appVerFloat = (float) appProps.get(«version»);

    Как установить свойства

    Мы можем использовать метод setProperty(), чтобы обновить существующую пару ключ-значение или добавить новую.

    Класс Properties наследует метод put() и метод putAll() от класса Hashtable, я не рекомендую использовать их по той же причине, что и для метода get(): в свойствах могут использоваться только строковые значения.

    Приведенный ниже код не будет работать так, как вы хотите, когда вы используете getProperty() для получения его значения, он вернет null:
    appProps.put(«version», 2);

    Удалить свойства

    Если вы хотите удалить пару ключ-значение, вы можете использовать метод remove().

    Хранение Properties

    Класс Properties предоставляет метод store() для вывода пар ключ-значение.

    Второй параметр используется для комментариев. Если вы не хотите писать какой-либо комментарий, просто используйте для него значение null.

    Хранение в XML-файлах

    Класс Properties также предоставляет метод storeToXML() для вывода пар ключ-значение в формате XML.

    Второй параметр такой же, как и в методе store().

    Объект Properties может содержать другой объект Properties в качестве списка свойств по умолчанию. Список свойств по умолчанию будет найден, если ключ свойства не найден в исходном.

    По умолчанию файлы свойств должны быть в кодировке ISO-8859-1 (Latin-1), поэтому обычно не следует использовать свойства с символами не из ISO-8859-1.

    Мы можем обойти это ограничение с помощью таких инструментов, как JDK native2ascii или явное кодирование файлов, если это необходимо. Для файлов XML метод loadFromXML() и метод storeToXML() по умолчанию используют кодировку UTF-8.

    Полный исходный код проекта доступен на GitHub

    Средняя оценка / 5. Количество голосов:

    Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

    Properties - 1

    В Java принято делать программы гибкими и легко настраиваемыми. Иногда еще говорят легко конфигурируемыми (от конфигурация).

    Например, твоя программа раз в час копирует файлы из некоторой директории, архивирует их и отсылает тебе на email. Для этого программе надо знать директорию, откуда брать файлы и email, куда их посылать. Такие данные принято хранить не в коде программы, а в отдельных файлах свойств – properties-файлах.

    Данные в таком файле хранятся в виде пар ключ-значение, разделенные знаком равно.

    Слева от знака равно – имя (ключ), справа – значение.

    Для удобной работы с такими файлами в Java есть специальный класс – Properties. Класс Properties унаследован от Hashtable. Его даже можно рассматривать как HashTable, который умеет загружать себя из файла.

    Метод Описание
    void load(Reader reader) Загружает свойства из файла, представленного объектом Reader
    void load(InputStream inStream) Загружает свойства из файла, представленного объектом InputStream
    void loadFromXML(InputStream in) Загружает свойства из XML-файла
    Object get(Object key) Возвращает значение по ключу. Метод унаследован от HashTable
    String getProperty(String key) Возвращает значение свойства (строку) по ключу
    String getProperty(String key, String defaultValue) Возвращает значение свойства по ключу или defaultValue, если такого ключа нет
    Set stringPropertyNames() Возвращает список всех ключей

    Т.е. фактически тебе нужно выполнить всего две операции – загрузить в объект Properties данные из какого-нибудь файла, а затем получить эти свойства с помощью метода getProperty(). Ну и не забывай, что можешь пользоваться объектом Properties как HashMap.

    Вот тебе пример:

    Я хочу получить доступ к значениям, указанным application.properties , например:

    Я хочу получить доступ userBucket.path к моей основной программе в приложении Spring Boot.

    Вы можете использовать @Value аннотацию и получить доступ к свойству в любом компоненте Spring, который вы используете

    В разделе « Внешняя конфигурация » документации Spring Boot объясняются все детали, которые могут вам понадобиться.

    в качестве альтернативы можно получить их также весной Environment или через @ConfigurationProperties Что если вам нужно получить доступ к более чем 10 значениям, вам придется повторять свой пример 10 раз? Обратите внимание, что это работает только на @Component (или любой из его производных @Repository , т.

    Другой способ — это инъекция org.springframework.core.env.Environment в ваш боб.

    Что делать, если вы хотите искать свойства? И могу ли я предложить включить оператор import, чтобы все могли видеть имя пакета Environment, возможно, org.springframework.core.env.Environment Будьте осторожны, чтобы не импортировать неправильную среду. Я автоматически импортировал среду CORBA. У @JanacMeena была та же проблема с org.springframework.core.env.Environment

    @ConfigurationProperties может использоваться для отображения значений из .properties ( .yml также поддерживаемых) в POJO.

    Рассмотрим следующий пример файла.

    Теперь к значению свойств можно получить доступ с помощью автоматического подключения employeeProperties следующим образом.

    Я использовал этот способ и получил нулевой возврат, я поместил свой файл свойств в java-класс src / test / resources и properties (в котором сохраняется значение свойств) в src / main / package / properties. что я пропустил? спасибо Вы должны сохранить файлы, src/main/resources если вы не тестируете свой код из теста Spring. То же, что @AhmadLeoYudanto, и я ничего не могу сделать, чтобы это изменить

    В настоящее время я знаю о следующих трех способах:

    1. @Value Аннотация

    • По моему опыту, есть ситуации, когда вы не можете получить значение или оно установлено на null . Например, когда вы пытаетесь установить его в preConstruct() метод или init() метод. Это происходит потому, что внедрение значения происходит после того, как класс полностью построен. Вот почему лучше использовать 3-й вариант.

    2. @PropertySource Аннотация

    • PropertySouce устанавливает значения из исходного файла свойств в Environment переменную (в вашем классе), когда класс загружается. Таким образом, вы можете легко получить послесловие.
      • Доступно через переменную System Environment.

      3. @ConfigurationProperties Аннотация.

        В основном это используется в проектах Spring для загрузки свойств конфигурации.

      Он инициализирует объект на основе данных свойства.

      • @ConfigurationProperties определяет файл свойств для загрузки.
      • @Configuration создает компонент на основе переменных файла конфигурации.

      Вы можете сделать это и так .

      Затем, где бы вы ни хотели прочитать данные из application.properties, просто передайте ключ методу getConfigValue.

      Найдите это здесь: org.springframework.core.env.Environment Что если местоположение по умолчанию переопределено spring.config.location ?

      Вы можете использовать @Value для загрузки переменных из, application.properties если вы будете использовать это значение в одном месте, но если вам нужен более централизованный способ загрузки этих переменных @ConfigurationProperties , это лучший подход.

      Кроме того, вы можете загружать переменные и автоматически приводить их, если вам нужны разные типы данных для проверки и бизнес-логики.

      Следуй этим шагам. 1: — создайте свой класс конфигурации, как показано ниже

      2: — когда у вас есть класс конфигурации, введите переменную из конфигурации, где вам нужно.

      Приложение может прочитать 3 типа значений из файла application.properties.

      файл класса

      Если у вас нет свойства в application.properties, вы можете использовать значение по умолчанию

      Spring-boot позволяет нам использовать несколько методов для предоставления внешних конфигураций, вы можете попробовать использовать файлы application.yml или yaml вместо файла свойств и предоставить разные файлы свойств для настройки в соответствии с различными средами.

      Мы можем разделить свойства для каждой среды на отдельные файлы yml под отдельными весенними профилями. Во время развертывания вы можете использовать:

      указать, какой весенний профиль использовать. Обратите внимание, что файлы yml должны иметь имя, подобное

      для них будет автоматически занято Springboot.

      Чтобы прочитать из application.yml или файла свойств:

      Самый простой способ прочитать значение из файла свойств или yml — это использовать spring @value annotation.Spring автоматически загружает все значения из yml в среду Spring, поэтому мы можем напрямую использовать эти значения из среды, например:

      Или другой метод, который предоставляет Spring для чтения строго типизированных bean-компонентов:

      Читайте также:

      • Mi box s hdmi cec не выключает телевизор
      • Ноутбук для работы в офисе недорогой рейтинг
      • Как обойти блокировку скриншота экрана на компьютере
      • Imax b6 подключение к компьютеру
      • Что такое кэш кап

      Как получить данные из файла property java

      Для получения данных из файла property можно воспользоваться возможностями класса Properties .

      Пусть у нас имеется файл application.properties :

      Получим эти данные в программе :
      import java.io.*; import java.util.Properties; public class App  public static void main(String[] args) throws IOException  Properties prop = new Properties(); prop.load(new FileInputStream("application.properties")); String value = prop.getProperty("server.port"); System.out.println(value); // => $ value = prop.getProperty("rollbar_token"); System.out.println(value); // => 3749c863ebc141 value = prop.getProperty("spring.profiles.active"); System.out.println(value); // => prod > > 

      Properties

      Properties - 1

      В Java принято делать программы гибкими и легко настраиваемыми. Иногда еще говорят легко конфигурируемыми (от конфигурация).

      Например, твоя программа раз в час копирует файлы из некоторой директории, архивирует их и отсылает тебе на email. Для этого программе надо знать директорию, откуда брать файлы и email, куда их посылать. Такие данные принято хранить не в коде программы, а в отдельных файлах свойств – properties-файлах.

      Данные в таком файле хранятся в виде пар ключ-значение, разделенные знаком равно.

      Файл data.properties directory=c:/text/downloads email=zapp@javarush.ru

      Java-университет

      Слева от знака равно – имя (ключ), справа – значение.

      — Т.е. это что-то типа текстового представления HashMap?

      Для удобной работы с такими файлами в Java есть специальный класс – Properties. Класс Properties унаследован от Hashtable. Его даже можно рассматривать как HashTable, который умеет загружать себя из файла.

      Метод Описание
      void load(Reader reader) Загружает свойства из файла, представленного объектом Reader
      void load(InputStream inStream) Загружает свойства из файла, представленного объектом InputStream
      void loadFromXML(InputStream in) Загружает свойства из XML-файла
      Object get(Object key) Возвращает значение по ключу. Метод унаследован от HashTable
      String getProperty(String key) Возвращает значение свойства (строку) по ключу
      String getProperty(String key, String defaultValue) Возвращает значение свойства по ключу или defaultValue, если такого ключа нет
      Set stringPropertyNames() Возвращает список всех ключей

      Т.е. фактически тебе нужно выполнить всего две операции – загрузить в объект Properties данные из какого-нибудь файла, а затем получить эти свойства с помощью метода getProperty(). Ну и не забывай, что можешь пользоваться объектом Properties как HashMap.

      Вот тебе пример:

      //файл, который хранит свойства нашего проекта File file = new File("c:/data.properties"); //создаем объект Properties и загружаем в него данные из файла. Properties properties = new Properties(); properties.load(new FileReader(file)); //получаем значения свойств из объекта Properties String email = properties.getProperty("email"); String directory = properties.getProperty("directory"); //получаем числовое значение из объекта Properties int maxFileSize = Integer.parseInt(properties.getProperty("max.size", "10000"));

      — Ага. Т.е. мы создаем объект Properties, затем передаем в него файл. В метод load, а затем просто вызываем getProperty. Так?

      — А ты еще говорил, что им можно пользоваться как HashMap? Что ты имел в виду?

      — Класс Properties унаследован от Hashtable, а это – тот же HashMap, просто все методы его синхронизированы. Вот так можно просто вывести на экран все значения из файла свойств:

      //получаем файл со свойствами File file = new File("c:/data.properties"); //создаем объект Properties и загружаем в него данные из файла. Properties properties = new Properties(); properties.load(new FileReader(file)); //проходимся по всем ключам и печатаем все их значения на консоль for (String key : properties.stringPropertyNames()) < System.out.println(properties.get(key)); >

      — Ага. Вроде все стало на свои места. Спасибо, Риша, буду пользоваться такой крутой штукой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *