在springMVC中经常会看到各种后缀名为properties的档案文件,档案文件中的内容是一行一行的键值对,比如:
CONTEXT = com.warlock.mvc等等,有点类似一个常量库存区。在某些常量的值需要修改的时候直接修改这个properties文件中对应的配置就可以了,减少了很多去代码中查找的过程。比如在改变部署环境的时候可能需要修改数据库的地址,用户名等参数,如此一来就可以在properties文件中修改即可,而不需要深入到复杂的代码中去寻找硬编码的URL,USERNAME等等的东西。当然说去代码中寻找已经够土的了,在使用了依赖注入后,更多的有关常量的初始化都是写在配置文件中,那么properties文件的作用是啥呢?哈哈,就是进一步的将xml中可能使用到的一些常量挪到统一的档案文件中,而不是满布于xml中。
比如有这样一个类叫MySQLManager,在这个类中包含一些对于数据库的基础操作,当然包含这样几个属性:
然后如果这个应用需要部署到云端的话,以SAE为例,可能需要修改bean成这样:
这样一来在需要更新布包的时候就将bean改成SAE的参数,mvn clean install , 上传war包。在本地进行调试的时候再找到这个bean,再将参数修改成本地的bean。
那么使用properties档案文件之后是咋搞的呢?
先弄两个properties文件,一个称为localConfig.properties,另外一个是sinaConfig.properties。在两个档案文件中写好各自使用的参数,比如localConfig.properties中的内容应该包含这些内容:
READ_URL = jdbc:mysql://localhost/CoreBase
WRITE_URL = jdbc:mysql://localhost/CoreBase
USERNAME = root
PASSWORD =
再加入一段指定应该使用哪个properties的bean就可以使用了,比如:
如此一来,在改变部署环境下的MySQLManager配置的时候,只需要稍微动一下这个PropertyPlaceholderConfigurer的注入参数为对应的properties文件就可以了。
进一步的,如果我们把这两个properties弄得更好使用一点,修改成这样:
CONTEXT = com.warlock.mvc等等,有点类似一个常量库存区。在某些常量的值需要修改的时候直接修改这个properties文件中对应的配置就可以了,减少了很多去代码中查找的过程。比如在改变部署环境的时候可能需要修改数据库的地址,用户名等参数,如此一来就可以在properties文件中修改即可,而不需要深入到复杂的代码中去寻找硬编码的URL,USERNAME等等的东西。当然说去代码中寻找已经够土的了,在使用了依赖注入后,更多的有关常量的初始化都是写在配置文件中,那么properties文件的作用是啥呢?哈哈,就是进一步的将xml中可能使用到的一些常量挪到统一的档案文件中,而不是满布于xml中。
比如有这样一个类叫MySQLManager,在这个类中包含一些对于数据库的基础操作,当然包含这样几个属性:
readURL writeURL userName password 。写好包含诸参数初始化的构造函数(注入口)弄好之后,可以弄个bean给这几个类注入参数了。本地环境下时bean可能写成这样:
<bean id="mySQLmanagerConfig" class="com.warlock.mvc.MySQLmanager">
<constructor-arg index="0" value="jdbc:mysql://localhost/CoreBase"/>
<constructor-arg index="1" value="jdbc:mysql://localhost/CoreBase"/>
<constructor-arg index="2" value="root"/>
<constructor-arg index="3" value=""/>
</bean>
然后如果这个应用需要部署到云端的话,以SAE为例,可能需要修改bean成这样:
<bean id="mySQLmanagerConfig" class="com.warlock.mvc.MySQLmanager">
<constructor-arg index="0" value="jdbc:mysql://r.rdc.sae.sina.com.cn:3307/CoreBase"/>
<constructor-arg index="1" value="jdbc:mysql://w.rdc.sae.sina.com.cn:3307/CoreBase"/>
<constructor-arg index="2" value="warlock"/>
<constructor-arg index="3" value="veryLongPasswordForWarlock"/>
</bean>
这样一来在需要更新布包的时候就将bean改成SAE的参数,mvn clean install , 上传war包。在本地进行调试的时候再找到这个bean,再将参数修改成本地的bean。
那么使用properties档案文件之后是咋搞的呢?
先弄两个properties文件,一个称为localConfig.properties,另外一个是sinaConfig.properties。在两个档案文件中写好各自使用的参数,比如localConfig.properties中的内容应该包含这些内容:
READ_URL = jdbc:mysql://localhost/CoreBase
WRITE_URL = jdbc:mysql://localhost/CoreBase
USERNAME = root
PASSWORD =
然后在之前注入MySQLManager的bean中采用properties文件中的配置,bean写成:
<bean id="mySQLmanagerConfig" class="com.warlock.mvc.MySQLmanager">
<constructor-arg index="0" value="${READ_URL}"/>
<constructor-arg index="1" value="${WRITE_URL}"/>
<constructor-arg index="2" value="${USERNAME}"/>
<constructor-arg index="3" value="${PASSWORD}"/>
</bean>
再加入一段指定应该使用哪个properties的bean就可以使用了,比如:
<bean id="fileConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:sinaConfig.properties</value>
</property>
</bean>
如此一来,在改变部署环境下的MySQLManager配置的时候,只需要稍微动一下这个PropertyPlaceholderConfigurer的注入参数为对应的properties文件就可以了。
进一步的,如果我们把这两个properties弄得更好使用一点,修改成这样:
<bean id="fileConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:${environment}Config.properties</value>
</property>
</bean>
也就是具体使用哪个Config文件,是由这个名为environment的变量来控制的,如此一来,在执行maven命令的时候只需要传入这个参数就可以了,比如,生成适用于SAE的war包可以用这个命令:
mvn install -Denvironment=sina
而在本地启动jetty的时候,就可以使用这个命令:
mvm jetty:run -Denvironment=local
妈妈再也不用担心我找不到配置了!
26th Sep