Spring基于注解读取外部配置文件
一、使用注解@PropertySource
指定路径
使用@PropertySource指定配置文件路径,支持properties和XML的配置文件,但不支持yml。
属性赋值
可以用注解@Value对属性直接赋值、${}获取配置文件的值、SPEL表达式#{}。
- 直接赋值:@Value("namejack")
- 读取配置文件:@Value("${user.age}")
- 指定默认值:@Value("${user.desc:defaultdesc}")表示如果没有user.desc的配置,则赋值为defaultdesc
- SPEL表达式:@Value("#{'${user.username}'?.toUpperCase()}")表示将从配置文件读取的值转为大写,?可以不填,表示如果没有user.username的配置,则忽略
例子
config.properties内容
ps.datasource.driverClassName=com.mysql.jdbc.Driver
ps.datasource.jdbcUrl=jdbc:mysql://localhost:3306/spring?useTimezone=true&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&tcpRcvBuf=1024000&useOldAliasMetadataBehavior=true&useSSL=false&rewriteBatchedStatements=true&useAffectedRows=true
ps.datasource.username=root
ps.datasource.password=root
ps.datasource.minIdle=1
ps.datasource.maxPoolSize=10
ps.datasource.connectionTimeout=3000
ps.datasource.idleTimeout=300000
配置类
/**
*使用@PropertySource指定具体的配置文件,用@Value设置具体的属性值,不支持yml
*/
@Component
@PropertySource("classpath:config.properties")
publicclassDbProperties{
@Value("${ps.datasource.driverClassName}")
privateStringdriverClassName;
@Value("${ps.datasource.jdbcUrl}")
privateStringjdbcUrl;
@Value("${ps.datasource.username}")
privateStringusername;
@Value("${ps.datasource.password}")
privateStringpassword;
@Value("${ps.datasource.minIdle}")
privateintminIdle;
@Value("${ps.datasource.maxPoolSize}")
privateintmaxPoolSize;
@Value("${ps.datasource.connectionTimeout}")
privateintconnectionTimeout;
@Value("${ps.datasource.idleTimeout}")
privateintidleTimeout;
publicStringgetDriverClassName(){
returndriverClassName;
}
publicvoidsetDriverClassName(StringdriverClassName){
this.driverClassName=driverClassName;
}
publicStringgetJdbcUrl(){
returnjdbcUrl;
}
publicvoidsetJdbcUrl(StringjdbcUrl){
this.jdbcUrl=jdbcUrl;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicintgetMinIdle(){
returnminIdle;
}
publicvoidsetMinIdle(intminIdle){
this.minIdle=minIdle;
}
publicintgetMaxPoolSize(){
returnmaxPoolSize;
}
publicvoidsetMaxPoolSize(intmaxPoolSize){
this.maxPoolSize=maxPoolSize;
}
publicintgetConnectionTimeout(){
returnconnectionTimeout;
}
publicvoidsetConnectionTimeout(intconnectionTimeout){
this.connectionTimeout=connectionTimeout;
}
publicintgetIdleTimeout(){
returnidleTimeout;
}
publicvoidsetIdleTimeout(intidleTimeout){
this.idleTimeout=idleTimeout;
}
@Override
publicStringtoString(){
return"DbProperties{"+
"driverClassName='"+driverClassName+'\''+
",jdbcUrl='"+jdbcUrl+'\''+
",username='"+username+'\''+
",password='"+password+'\''+
",minIdle="+minIdle+
",maxPoolSize="+maxPoolSize+
",connectionTimeout="+connectionTimeout+
",idleTimeout="+idleTimeout+
'}';
}
}
二、使用Environment
/**
*Environment可以获取classpath下配置的属性值,无需指定具体的配置文件。不支持yml
*/
@Component
publicclassUserProperties{
@Autowired
privateEnvironmentenv;
publicStringgetUserName(){
returnenv.getProperty("user.name");
}
publicStringgetPassword(){
returnenv.getProperty("user.password");
}
}
三、使用PropertiesLoaderUtils
try{
Propertiesproperties=PropertiesLoaderUtils.loadAllProperties("config.properties");
System.out.println(properties.getProperty("user.name"));
}catch(IOExceptione){
e.printStackTrace();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。