配置文件application.yml
是这样写的:
authox:
sql:
url: jdbc:mysql://47.100.237.208:3306/cloudtest?useUnicode=true&characterEncoding=utf-8&useSSL=false
user: user
password: password
driver-class-name: driver-class-name
当使用下面的方式的取值时:
@Value("${authox.sql.url}")
private static String url;
@Value("${authox.sql.username}")
private static String user;
@Value("${authox.sql.password}")
private static String password;
@Value("${authox.sql.driver-class-name}")
private static String driver;
这样子赋值给静态变量,在编译阶段也不会报错,只是使用时取出的数据会是null
。
@Value注解只能给普通变量赋值,无法赋值给静态变量。
解决方法
先使用@Component将类注册为一个组件。
然后将@Value注解写在set方法上,通过set方法来修改静态变量即可,如下所示:
@Component
public class JdbcUtils{
private static String URL;
private static String USER_NAME;
private static String PASS_WORD;
private static String DRIVER_NAME;
@Value("${authox.sql.url}")
public void setUrl(String url) {
JdbcUtils.URL = url;
}
@Value("${authox.sql.username}")
public void setUser(String user) {
JdbcUtils.USER_NAME = user;
}
@Value("${authox.sql.password}")
public void setPassword(String password) {
JdbcUtils.PASS_WORD = password;
}
@Value("${authox.sql.driver-class-name}")
public void setDriver(String driver) {
JdbcUtils.DRIVER_NAME = driver;
}
}