为什么要使用外部属性文件
使用外部属性文件的步骤•在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和Bean 配置相分离•Spring 提供了一个 PropertyPlaceholderConfigurer 的 BeanFactory后置处理器, 这个处理器允许用户将Bean 配置的部分内容外移到属性文件中. 可以在 Bean 配置文件里使用形式为${var} 的变量, PropertyPlaceholderConfigurer 从属性文件里加载属性, 并使用这些属性来替换变量.•Spring 还允许在属性文件中使用${propName},以实现属性之间的相互引用。
这里以数据源为例,使用spring自带的数据源配置,首先在xml文件中配置上面是不使用外部属性文件的配置<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="username" value="root" ></property> <property name="password" value="123"></property> <property name="driverClassName" value="com.mysql.jdbc.Driver" ></property> <property name="url" value="jdbc:msyql:///test"></property> </bean>
如果使用了外部属性配置,那么需要在类路径下添加一个属性文件以".properties"结尾,那么我们命名为db.properties,其编写风格如下url的配置中最好在test后面添加jdbc.user=root jdbc.password=123 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql:///test
这样减少出现乱码问题?useUnicode=true&characterEncoding=UTF-8
新的配置文件中应该使用类似于EL表达式的方式在value属性中添加值同时在applicationContext.xml文件中也要加载db.properties文件,所以需要在配置文件中添加这样一段代码<!-- 导入资源文件 --> <context:property-placeholder location="classpath:db.properties" />
默认数据源的配置这样一个以spring自带数据源的属性文件已经配置好了,但是使用C3P0的数据源配置有所不同,主要是定义的name属性中值不同。<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="username" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClassName" value="${jdbc.driverClass}" ></property> <property name="url" value="${jdbc.jdbcUrl}"></property> </bean>
c3p0的配置<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}" ></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="jdbcurl" value="${jdbc.jdbcUrl}"></property> </bean>
所以在配置数据源的时候要注意这两种的配置区别