我想访问应用程序中提供的值。属性,例如:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
我想访问userBucket。在Spring Boot应用程序的主程序中的路径。
我想访问应用程序中提供的值。属性,例如:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
我想访问userBucket。在Spring Boot应用程序的主程序中的路径。
当前回答
@Value Spring注释用于向Spring管理的bean中的字段注入值,它可以应用于字段或构造函数/方法参数级别。
例子
从注释到字段的字符串值
@Value("string value identifire in property file")
private String stringValue;
我们还可以使用@Value注释来注入Map属性。 首先,我们需要在属性文件中的{key: ' value'}形式中定义属性:
valuesMap={key1: '1', key2: '2', key3: '3'}
并不是说Map中的值必须是单引号。
现在从属性文件中注入这个值作为Map:
@Value("#{${valuesMap}}")
private Map<String, Integer> valuesMap;
来获取特定键的值
@Value("#{${valuesMap}.key1}")
private Integer valuesMapKey1;
我们还可以使用@Value注释来注入List属性。
@Value("#{'${listOfValues}'.split(',')}")
private List<String> valuesList;
其他回答
为了从属性文件中选择值,我们可以有一个配置读取器类,比如ApplicationConfigReader.java 然后根据属性定义所有变量。参考下面的例子,
application.properties
myapp.nationality: INDIAN
myapp.gender: Male
下面是相应的阅读类。
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "myapp")
class AppConfigReader{
private String nationality;
private String gender
//getter & setter
}
现在,我们可以在任何想要访问属性值的地方自动连接阅读器类。 如。
@Service
class ServiceImpl{
@Autowired
private AppConfigReader appConfigReader;
//...
//fetching values from config reader
String nationality = appConfigReader.getNationality() ;
String gender = appConfigReader.getGender();
}
我也有这个问题。但是有一个很简单的解决办法。只需要在构造函数中声明你的变量。
我的例子:
application.propperties:
#Session
session.timeout=15
SessionServiceImpl经济舱:
private final int SESSION_TIMEOUT;
private final SessionRepository sessionRepository;
@Autowired
public SessionServiceImpl(@Value("${session.timeout}") int sessionTimeout,
SessionRepository sessionRepository) {
this.SESSION_TIMEOUT = sessionTimeout;
this.sessionRepository = sessionRepository;
}
对我来说,以上这些方法对我都没有直接作用。 我所做的是:
另外,我补充了@Rodrigo Villalba Zayas的回答 实现InitializingBean到类 并实现了该方法
@Override
public void afterPropertiesSet() {
String path = env.getProperty("userBucket.path");
}
这看起来就像
import org.springframework.core.env.Environment;
public class xyz implements InitializingBean {
@Autowired
private Environment env;
private String path;
....
@Override
public void afterPropertiesSet() {
path = env.getProperty("userBucket.path");
}
public void method() {
System.out.println("Path: " + path);
}
}
有3种方法读取application.properties,
使用@Value, EnvironmentInterface和@ConfigurationProperties..
@Value(${userBucket.path})
private String value;
方式2:
@Autowired
private Environment environment;
String s = environment.getProperty("userBucket.path");
第三道:
@ConfigurationProperties("userbucket")
public class config {
private String path;
//getters setters
}
可以读取与getter和setter ..
参考资料-此处
目前, 我知道以下三种方法:
1. @Value注释
@Value("${<property.name>}")
private static final <datatype> PROPERTY_NAME;
根据我的经验,有些情况下你并不是 能够获取该值或将其设置为null。 例如, 当你尝试在preConstruct()方法或init()方法中设置它时。 这是因为值注入发生在类完全构造之后。 这就是为什么最好使用3'选项的原因。
2. @PropertySource注释
@PropertySource("classpath:application.properties")
//env is an Environment variable
env.getProperty(configKey);
当装入类时,PropertySouce从环境变量中的属性源文件(在您的类中)设置值。 所以你可以很容易地获取后记。 可通过系统环境变量访问。
3.@ConfigurationProperties注释。
这主要用于Spring项目中加载配置属性。 它根据属性数据初始化实体。 @ConfigurationProperties标识要加载的属性文件。 @Configuration基于配置文件变量创建bean。 @ConfigurationProperties(prefix = "user") @ configuration(“用户数据”) 类用户{ //属性及其getter / setter } @ autowired private UserData; userData.getPropertyName ();