react 前端框架如何驱动企业数字化转型与创新发展
1134
2023-03-04
Spring基于注解读取外部配置文件
一、使用注解@PropertySource
指定路径
使用 @PropertySource 指定配置文件路径,支持 properties 和 XML 的配置文件,但不支持 yml。
属性赋值
可以用注解 @Value 对属性直接赋值、${}获取配置文件的值、SPEL表达式#{}。
直接赋值:@Value("name jack")
读取配置文件:@Value("${user.age}")
指定默认值:@Value("${user.desc:default desc}") 表示如果没有user.desc的配置,则赋值为default desc
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:cohttp://nfig.properties")
public class DbProperties {
@Value("${ps.datasource.driverClassName}")
private String driverClassName;
@Value("${ps.datasource.jdbcUrl}")
private String jdbcUrl;
@Value("${ps.datasource.username}")
private String username;
@Value("${ps.datasource.pasfaLcFsword}")
private String password;
@Value("${ps.datasource.minIdle}")
private int minIdle;
@Value("${ps.datasource.maxPoolSize}")
private int maxPoolSize;
@Value("${ps.datasource.connectionTimeout}")
private int connectionTimeout;
@Value("${ps.datasource.idleTimeout}")
private int idleTimeout;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public int getMaxPoolSize() {
return maxPoolSize;
}
public void setMaxPoolSize(int maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
public int getConnectionTimeout() {
return connectionTimeout;
}
public void setConnectionTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
}
public int getIdleTimeout() {
return idleTimeout;
}
public void setIdleTimeout(int idleTimeout) {
this.idleTimeout = idleTimeout;
}
@Override
public String toString() {
return "DbProperties{" +
"driverClassName='" + driverClassName + '\'' +
", jdbcUrl='" + jdbcUrl + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", minIdle=" + minIdle +
", maxPoolSize=" + maxPoolSize +
", connectionTimeout=" + connectionTimeout +
", idleTimeout=" + idleTimeout +
'}';
}
}
二、使用Environment
/**
* Environment可以获取classpath下配置的属性值,无需指定具体的配置文件。 不支持yml
*/
@Component
public class UserProperties {
@Autowired
private Environment env;
public String getUserName() {
return env.getProperty("user.name");
}
public String getPassword() {
return env.getProperty("user.password");
}
}
三、使用PropertiesLoaderUtils
try {
Properties properties = PropertiesLoaderUtils.loadAllProperties("config.properties");
System.out.println(properties.getProperty("user.name"));
} catch (IOException e) {
e.printStackTrace();
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~