Spring 获取属性值

来源:互联网 发布:财达大智慧软件下载 编辑:程序博客网 时间:2024/06/05 18:38

在 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中,首先使用被标注的DataSourcepublic 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;}@Beanpublic static PropertySourcesPlaceholderConfigurer propertyConfig() {    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();    configurer.setLocation(new ClassPathResource("application.properties"));    return configurer;}}

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

原创粉丝点击