Глобальная переменная java spring

как установить глобальные переменные в Java/Spring web MVC?

Я хочу иметь набор глобальных переменных на моем веб-сайте Java/Spring. Я думаю о таких вещах, как: отправителя электронной почты (будет только 1 значение, поскольку это электронная почта офиса) почтовый сервер IP/хост (мы используем собственный SMTP-сервер) и другие вещи, о которых я не могу думать в короткие сроки. Я сделал поиск, но ничего полезного не придумал, где/как это сделать. Благодарю! 🙂

Для простого и прямолинейного решения я предлагаю вам использовать файл свойств, хранящийся в каталоге (config) в вашем каталоге WebContent. Ниже приведен базовый код о том, как вы можете читать свойства из файла. (Не стесняйтесь изменять его в соответствии с вашими потребностями.) Создайте интерфейс или класс, чтобы содержать статические ключи свойств. Для более сложного подхода вы также можете рассмотреть библиотеку конфигурации Apache Commons.

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

public class ConfigurationReader

private static final String FILE_SEPARATOR_KEY = "file.separator";
private String configDirectory; // initialised with ServletContext absolute path
private String configFileName; // filename of the properties file
private Properties properties;

public void init() throws IOException InputStream inputStream = new FileInputStream(getFileConfigPath(configDirectory, configFileName));
try properties = new Properties();
properties.load(inputStream);
>
finally try inputStream.close();
>
catch(Exception e) <>
>
>

public String getProperty(String key) return properties.getProperty(key);
>

private String getFileConfigPath(String directory, String fileName) StringBuilder sb = new StringBuilder();
sb.append(directory);
if(!sb.substring((sb.length() - 1)).equals(System.getProperty(FILE_SEPARATOR_KEY))) sb.append(System.getProperty(FILE_SEPARATOR_KEY));
>
sb.append(fileName);
return sb.toString();
>

public String getConfigDirectory() return configDirectory;
>

public void setConfigDirectory(String configDirectory) this.configDirectory = configDirectory;
>

public String getConfigFileName() return configFileName;
>

public void setConfigFileName(String configFileName) this.configFileName = configFileName;
>
>

Источник

Spring: @Value aннотация

Основная цель этой статьи — помочь вам понять, как работает аннотация Spring @Value.

@Value является аннотацией Java, которая используется на уровне параметра поля или метода / конструктора и указывает значение по умолчанию для затронутого аргумента. Он обычно используется для ввода значений в конфигурационные переменные — что мы покажем и объясним в следующей части статьи.

Основное назначение

Для самых простых примеров мы назначим значения трем различным полям, используя аннотацию @Value , дав им явные значения:

@Value("John") private String trainee; @Value("100") private int hoursOfCode; @Value("true") private boolean passedAssesmentTest; 

Очень важно отметить, что аргумент, переданный аннотации @Value , может быть только String . Spring преобразует значение в указанный тип, и присвоение будет выполнено без проблем, даже если мы передаем переменным String значение int или boolean .

Spring Environment

Внедрение значений из файлов свойств с помощью аннотации @Value , вероятно, наиболее часто используется в реальных приложениях.

Мы будем использовать файл свойств по умолчанию для Spring Boot — application.properties , где мы можем определить переменные, к которым мы сможем обращаться позже:

car.brand=Audi car.color=Red car.power=150 
@Value("$") private String color; @Value("$") private int power; 

В этом примере значения переменных считываются из файла application.properties и присваиваются им во время создания компонента.

В большинстве случаев мы использовали бы этот подход для вставки значений конфигурации из файла application.properties в bean-компоненты.

Значение по умолчанию

Значения по умолчанию используются как «запасной вариант», если свойство, которое мы хотим внедрить, не определено или отсутствует:

@Value("$") private String type; 

В приведенном выше примере, потому как мы не имеем никакого значения car.type в application.properties , Spring присвоит Sedan к переменной type в качестве значения по умолчанию.

Если свойство car.type вставляется в файл свойств, вместо него будет использоваться новое значение.

Системные переменные

Мы также можем получить доступ к системным переменным, которые хранятся в виде свойств приложения Spring при запуске:

@Value("$") // Or @Value("$") private String userName; @Value("$") // Or @Value("$") private int numberOfProcessors; @Value("$") private String java; 

Переменные могут вызываться с различными соглашениями об именах — Spring ищет нас и присваивает правильное значение.

Значение глобального метода

Поскольку @Value обрабатывается классом BeanPostProcessor , он будет вызываться, когда Spring создает контекст Spring, создавая экземпляры файлов конфигурации и компонентов.

Это означает, что при наличии метода @Value все аргументы будут сопоставлены со значением, указанным в аннотации:

@Value("$") public CarData setCarData(String color, String brand)

Если мы печатаем, carData.getCarColor() и carData.getCarBrand() мы получим значение car.brand оба раза, потому что, как мы сказали, все аргументы будут сопоставлены с предоставленным значением.

Параметр метода Value

Мы можем исправить это, используя @Value непосредственно с параметр метода:

@Value("$") public CarData setCarData(@Value("$") String color, String brand)

Теперь, если мы печатаем значения из объекта carData — поле цвета будет иметь значение car.color , потому что мы предоставили значение для параметра самого метода.

Spring Expression Language (SpEL)

Язык выражений Spring (SpEL) — это язык выражений, который служит основой для оценки выражений в портфолио Spring.

По сути, когда мы используем SpEL вместе с аннотацией @Value , мы просто меняем способ сказать Spring, что нам нужно. Давайте внимательнее посмотрим:

@Value("#") private String userName; 

Это то, как вы вводите конкретное системное свойство. С другой стороны, мы можем добавить все свойства:

@Value("#") private Map properties; 

Теперь мы знаем, что мы можем использовать аннотацию @Value для методов как глобальное значение или как значение параметра.

Поскольку конструкторы по сути являются методами, мы можем использовать аннотацию и в конструкторах:

public Driver(@Value("#") String name, String location)

Инъекция в Map

С SpEL мы можем сделать некоторые другие довольно интересные вещи в сочетании с аннотацией @Value . Например, давайте сделаем Map, представляет что indoor и outdoor хобби студента. Каждый из них может иметь несколько значений:

Теперь, чтобы ввести это, нам понадобится Map > :

@Value("#>") private Map> hobbies; 

Внедрение в списки

Если свойство имеет значения, разделенные запятыми, например, простой список книг, мы можем использовать SpEL для его интерпретации и преобразования в список:

student.booksRead=Harry Potter,The Hobbit,Game of Thrones 

Используя метод split() и разделяя для каждой запятой ( , ), мы можем вставить эти значения в список:

@Value("#'.split(',')>") private List booksRead; 

Вывод

Как только вы заканчиваете работу над реальным приложением, вы понимаете, что конфигурация является важной темой, и если вы используете Spring. Существует большая вероятность того, что вы уже используете или вам придется широко использовать аннотацию @Value .

Понимание этой базовой функциональности очень важно, потому что если вы этого не сделаете, вы можете использовать ее совершенно неправильно.

Источник:

Источник

как установить глобальные переменные в Java/Spring web MVC?

Я сделал поиск, но ничего полезного не нашел о том, где/как это сделать.

Вы можете просто установить их в файле свойств. Посмотрите, как читать файл свойств в Spring. — Daniel Kaplan

3 ответы

Для простого и прямого решения я предлагаю вам использовать файл свойств, хранящийся в каталоге (config) в вашем каталоге WebContent. Ниже приведен базовый код того, как вы можете прочитать свойства из файла. (Не стесняйтесь изменять его в соответствии с вашими потребностями.) Создайте интерфейс или класс, содержащий ключи статических свойств.

Для более сложного подхода вы также можете рассмотреть библиотеку конфигурации Apache Commons.

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ConfigurationReader < private static final String FILE_SEPARATOR_KEY = "file.separator"; private String configDirectory; // initialised with ServletContext absolute path private String configFileName; // filename of the properties file private Properties properties; public void init() throws IOException < InputStream inputStream = new FileInputStream(getFileConfigPath(configDirectory, configFileName)); try < properties = new Properties(); properties.load(inputStream); >finally < try < inputStream.close(); >catch(Exception e) <> > > public String getProperty(String key) < return properties.getProperty(key); >private String getFileConfigPath(String directory, String fileName) < StringBuilder sb = new StringBuilder(); sb.append(directory); if(!sb.substring((sb.length() - 1)).equals(System.getProperty(FILE_SEPARATOR_KEY))) < sb.append(System.getProperty(FILE_SEPARATOR_KEY)); >sb.append(fileName); return sb.toString(); > public String getConfigDirectory() < return configDirectory; >public void setConfigDirectory(String configDirectory) < this.configDirectory = configDirectory; >public String getConfigFileName() < return configFileName; >public void setConfigFileName(String configFileName) < this.configFileName = configFileName; >> 

Создайте класс с общедоступными статическими переменными и используйте их как глобальные переменные. Если вам нужна глобальная переменная для каждой транзакции, установите переменные в java ThreadLocal и используйте их.

ЕСЛИ вы хотите, чтобы его можно было настраивать, попробуйте настроить его в DeploymentDescripter (web.xml) в качестве параметров контекста.

В противном случае вы можете иметь класс Util, содержащий константы, и объявить константные переменные как

public static final String EMAIL="xxx@yyy.com"; 

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками java spring or задайте свой вопрос.

ADV

Связанные вопросы

Последние вопросы

Связанные теги

Данный сайт использует файлы cookie, чтобы предоставить Вам наилучший сервис. Продолжая использовать сайт, Вы принимаете нашу политику в отношении файлов cookie. OkПодробнее

stackovergo.com 2020–2023, под лицензией куб.см по-са 3.0 с указанием авторства. | Персональные данные | Cookies политики

Источник

как установить глобальные переменные в Java/Spring web MVC?

Я сделал поиск, но ничего полезного не нашел о том, где/как это сделать.

Вы можете просто установить их в файле свойств. Посмотрите, как читать файл свойств в Spring. — Daniel Kaplan

3 ответы

Для простого и прямого решения я предлагаю вам использовать файл свойств, хранящийся в каталоге (config) в вашем каталоге WebContent. Ниже приведен базовый код того, как вы можете прочитать свойства из файла. (Не стесняйтесь изменять его в соответствии с вашими потребностями.) Создайте интерфейс или класс, содержащий ключи статических свойств.

Для более сложного подхода вы также можете рассмотреть библиотеку конфигурации Apache Commons.

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ConfigurationReader < private static final String FILE_SEPARATOR_KEY = "file.separator"; private String configDirectory; // initialised with ServletContext absolute path private String configFileName; // filename of the properties file private Properties properties; public void init() throws IOException < InputStream inputStream = new FileInputStream(getFileConfigPath(configDirectory, configFileName)); try < properties = new Properties(); properties.load(inputStream); >finally < try < inputStream.close(); >catch(Exception e) <> > > public String getProperty(String key) < return properties.getProperty(key); >private String getFileConfigPath(String directory, String fileName) < StringBuilder sb = new StringBuilder(); sb.append(directory); if(!sb.substring((sb.length() - 1)).equals(System.getProperty(FILE_SEPARATOR_KEY))) < sb.append(System.getProperty(FILE_SEPARATOR_KEY)); >sb.append(fileName); return sb.toString(); > public String getConfigDirectory() < return configDirectory; >public void setConfigDirectory(String configDirectory) < this.configDirectory = configDirectory; >public String getConfigFileName() < return configFileName; >public void setConfigFileName(String configFileName) < this.configFileName = configFileName; >> 

Создайте класс с общедоступными статическими переменными и используйте их как глобальные переменные. Если вам нужна глобальная переменная для каждой транзакции, установите переменные в java ThreadLocal и используйте их.

ЕСЛИ вы хотите, чтобы его можно было настраивать, попробуйте настроить его в DeploymentDescripter (web.xml) в качестве параметров контекста.

В противном случае вы можете иметь класс Util, содержащий константы, и объявить константные переменные как

public static final String EMAIL="xxx@yyy.com"; 

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками java spring or задайте свой вопрос.

ADV

Связанные вопросы

Последние вопросы

Связанные теги

Данный сайт использует файлы cookie, чтобы предоставить Вам наилучший сервис. Продолжая использовать сайт, Вы принимаете нашу политику в отношении файлов cookie. OkПодробнее

stackovergo.com 2020–2023, под лицензией куб.см по-са 3.0 с указанием авторства. | Персональные данные | Cookies политики

Источник

Читайте также:  Javascript array filter example
Оцените статью