Spring 获取属性值

在 Spring 中,处理外部值有两种方式:
(1)使用 @PropertySource 注解和 Environment 类;
(2)使用 @Value 注解和属性占位符

一. 使用 @PropertySource 注解和 Environment 类

@Configuration
@ComponentScan("com.shenjy")
@PropertySource("classpath:/application.properties")   //指定属性源
public class PlaceHolderConfig {
    @Autowired
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(env.getProperty("spring.datasource.url"));        datasource.setUsername(env.getProperty("spring.datasource.username"));    datasource.setPassword(env.getProperty("spring.datasource.password"));      datasource.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));

return datasource;
}
}

 如果需要注入非 String 类型的属性值,则可以使用 Environment 类的 getProperty() 方法的另一种重载方式,代码如下:

datasource.setTestWhileIdle(env.getProperty("spring.datasource.testWhileIdle", Boolean.class));
datasource.setInitialSize(env.getProperty("spring.datasource.initialSize", Integer.class));

二. 使用 @Value 注解和属性占位符

@Configuration
@ComponentScan("com.shenjy")
@PropertySource("classpath:/application.properties")
public class ValueConfig {
@Value("${spring.datasource.url}")
private String dbUrl;

@Value("${spring.datasource.username}")
private String username;

@Value("${spring.datasource.password}")
private String password;

@Value("${spring.datasource.driverClassName}")
private String driverClassName;

@Value("#{T(java.lang.Integer).parseInt('${spring.datasource.initialSize}')}")
private int initialSize;

@Value("#{T(java.lang.Boolean).parseBoolean('${spring.datasource.testWhileIdle}')}")
private boolean testWhileIdle;

@Bean     //声明其为Bean实例
@Primary  //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource(){
    DruidDataSource datasource = new DruidDataSource();

    datasource.setUrl(dbUrl);
    datasource.setUsername(username);
    datasource.setPassword(password);
    datasource.setDriverClassName(driverClassName);

    datasource.setInitialSize(initialSize);
    datasource.setTestWhileIdle(testWhileIdle);

    return datasource;
}

@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfig() {
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    configurer.setLocation(new ClassPathResource("application.properties"));
    return configurer;
}
}

 使用属性占位符时,需要手动添加 PropertySourcesPlaceholderConfigurer bean,它可以基于 Spring Environment 及其属性源来解析占位符。
 当需要类型转换时,目前自己知道的就是通过 Spring 表达式语言进行类型转换,如果还有其他比较简单的方式,麻烦指教下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值