@Inyección de valor
El caso de no pasar las propiedades inyectadas del archivo de configuración
Inyecte dinámicamente valores externos en el Bean a través de @Value, los casos de uso son los siguientes:
Inyecte cadenas ordinarias,
inyecte propiedades del sistema operativo,
inyecte resultados de expresión,
inyecte otras propiedades de bean: inyecte las propiedades de beanInject objetos, otro
inyecte recursos de archivos e
inyecte recursos de URL
Ver el código detallado:
@Value("normal")
private String normal; // 注入普通字符串
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
@Value("#{beanInject.another}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源
@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资源
Inyectar otras propiedades del bean: inyectar las propiedades del objeto beanInject otro
@Component
public class BeanInject {
@Value("其他Bean的属性")
private String another;
public String getAnother() {
return another;
}
public void setAnother(String another) {
this.another = another;
}
}
Inyectar propiedades a través del archivo de configuración
El valor del archivo de configuración externo se inyecta dinámicamente en el Bean a través de @Value. Hay dos tipos principales de archivos de configuración:
- application.properties. application.properties carga este archivo por defecto cuando se inicia Spring Boot
- Archivo de propiedades personalizadas. El archivo de propiedades personalizadas se carga a través de @PropertySource. @PropertySource puede cargar varios archivos al mismo tiempo o un solo archivo. Si existe la misma clave en el mismo primer archivo de propiedades y en el segundo archivo de propiedades, se activa la clave del último archivo de propiedades. La ruta del archivo cargado también se puede configurar con variables, de la siguiente manera: $ {anotherfile.configinject}, este valor se define en el primer archivo de propiedades config.properties
El contenido del primer archivo de propiedades config.properties es el siguiente:
$ {anotherfile.configinject} como el segundo Valor variable de la ruta de carga de un archivo de propiedad
book.name=bookName
anotherfile.configinject=placeholder
El contenido del segundo archivo de propiedades config_placeholder.properties es el siguiente:
book.name.placeholder=bookNamePlaceholder
Lo siguiente usa la gramática @Value ("$ {app.name}") para inyectar el valor del archivo de propiedades en el valor de la propiedad del bean. Vea el código detallado:
@Component
// 引入外部配置文件组:${app.configinject}的值来自config.properties。
// 如果相同
@PropertySource({"classpath:com/hry/spring/configinject/config.properties",
"classpath:com/hry/spring/configinject/config_${anotherfile.configinject}.properties"})
public class ConfigurationFileInject{
@Value("${app.name}")
private String appName; // 这里的值来自application.properties,spring boot启动时默认加载此文件
@Value("${book.name}")
private String bookName; // 注入第一个配置外部文件属性
@Value("${book.name.placeholder}")
private String bookNamePlaceholder; // 注入第二个配置外部文件属性
@Autowired
private Environment env; // 注入环境变量对象,存储注入的属性值
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("bookName=").append(bookName).append("\r\n")
.append("bookNamePlaceholder=").append(bookNamePlaceholder).append("\r\n")
.append("appName=").append(appName).append("\r\n")
.append("env=").append(env).append("\r\n")
// 从eniroment中获取属性值
.append("env=").append(env.getProperty("book.name.placeholder")).append("\r\n");
return sb.toString();
}
}
Fuente: https://blog.csdn.net/hry2015/article/details/72353994