1. 程式人生 > >Spring中使用屬性文件properties的兩種方式

Spring中使用屬性文件properties的兩種方式

文件 location 郵件發送 class mave red onf 路徑 文件內容

實際項目中,通常將可配置的參數放到屬性文件中,例如數據庫連接信息、redis連接信息等,便於統一管理。然後通過IoC框架spring將其加載到上下文中,使得程序可以直接使用。

創建mysql.properties文件,並置於CLASSPATH路徑中,如果使用maven構建工程,直接放置在resources文件夾下。文件內容:

mysql.url=jdbc:mysql://192.168.1.101:3306/demo
mysql.username=root
mysql.password=123456

在spring容器啟動時,使用內置bean對屬性文件信息進行加載,在applicationContext.xml中添加:

<!-- spring的屬性加載器,加載properties文件中的屬性 -->
<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>mysql.properties</value>
    </property>
    <property name="fileEncoding"
value="UTF-8" /> </bean>

屬性信息加載後其中一種使用方式是在其它bean定義中直接根據屬性信息的key引用value,如郵件發送器bean的配置:

<!-- 配置數據源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    <property name="url" 
value="${mysql.url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" /> </bean>

另一種使用方式是在代碼中獲取配置的屬性信息,可定義一個java bean:RedisConfig.java,利用註解將代碼中需要使用的屬性信息註入。如屬性文件中有如下信息需在代碼中獲取使用:

redis.host=192.168.1.101
redis.port=6379

RedisConfig.java對應的代碼:

 1 package org.springinaction.weather.config;
 2 
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.stereotype.Component;
 5 
 6 @Component("redisConfig")
 7 public class RedisConfig {
 8 
 9     @Value("${redis.host}")
10     private String host;
11 
12     @Value("${redis.port}")
13     private String port;
14 
15     public String getHost() {
16         return host;
17     }
18 
19     public String getPort() {
20         return port;
21     }
22 }

通過get方法獲取對應的屬性信息:

 1 import org.springframework.context.ApplicationContext;
 2 import org.springframework.context.support.ClassPathXmlApplicationContext;
 3 import org.springinaction.weather.config.RedisConfig;
 4 
 5 public class RedisTest {
 6 
 7     public static void main(String[] args) {
 8         ApplicationContext context = new ClassPathXmlApplicationContext("spring-redis.xml");
 9         RedisConfig redisConfig = context.getBean(RedisConfig.class);
10         System.out.println(redisConfig.getHost());
11         System.out.println(redisConfig.getPort());
12     }
13 
14 }

通過get方法獲取對應的屬性信息,優點是代碼中使用方便,缺點是如果代碼中需用到新的屬性信息,需對RedisConfigjava做相應的添加修改。

Spring中使用屬性文件properties的兩種方式