-
Notifications
You must be signed in to change notification settings - Fork 5
为你的项目提供更好的配置支持
velna edited this page Apr 9, 2013
·
6 revisions
绝大多数的项目,都会使用多套配置文件:开发环境用的配置、测试环境用的配置、生产环境用的配置
绝大多数时,都不希望生产环境的配置暴露在众目睽睽之下
绝大多数时,配置文件的管理很头疼:开发人员和测试人员需要经常修改这份配置文件,你又不希望他们把修改后的配置文件提交到版本仓库里,你希望版本仓库里只有一份标准的配置文件
。。。
org.sothis.core.config.ConfigurationSupport 可以为你解决所有上面的问题,而你只要做一件事情,实现你自己的config类:
public class ExampleConfig extends ConfigurationSupport { private final static ExampleConfig CONFIG; static { try { CONFIG = new ExampleConfig(); } catch (IOException e) { throw new RuntimeException("error init config: ", e); } catch (URISyntaxException e) { throw new RuntimeException("error init config: ", e); } } private ExampleConfig() throws IOException, URISyntaxException { super(System.getProperty("sothis.example.overridePropertiesLocation", "/path/to/your/override.properties")); } public static ExampleConfig getConfig() { return CONFIG; } }
这样,所有在sothis.example.overridePropertiesLocation参数指定的文件中配置的项都覆盖掉项目中已有的配置 你也可以在这个类中增加一些get方法,让你的项目更轻松地读取配置
配合org.sothis.web.mvc.support.SpringPropertyPlaceholderConfigurer,原先用于spring的所有配置也可以轻松地使用这一特性:
<bean id="propertyConfigurer" class="org.sothis.web.mvc.support.SpringPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="propertiesBean"> <bean class="org.sothis.web.example.ExampleConfig" factory-method="getConfig" /> </property> </bean>
web.xml中:
<filter> <filter-name>sothis</filter-name> <filter-class>org.sothis.web.mvc.SothisFilter</filter-class> <init-param> <param-name>beanFactoryClass</param-name> <param-value>org.sothis.web.mvc.support.SpringBeanFactory</param-value> </init-param> <init-param> <param-name>configBeanName</param-name> <param-value>propertyConfigurer</param-value> </init-param> </filter>
也许你在项目代码的jdbc.properties中写了:
jdbc.mydb.host=127.0.0.1 jdbc.url=jdbc:mysql://${jdbc.mydb.host}:3306/mydb jdbc.driver.username=sa jdbc.driver.password=somepassword
在生产环境中,你完全可以在一个更安全的文件中覆盖掉这几个配置,比如在/path/to/your/override.properties中:
jdbc.mydb.host=192.168.0.123 jdbc.driver.username=mysa jdbc.driver.password=somesecretpassword
只要在jvm参数中加上:
-Dsothis.example.overridePropertiesLocation=/path/to/your/override.properties
就可以了
你还可以使用placeholder来简化配置:
jdbc.mydb.host=127.0.0.1 jdbc.url=jdbc:mysql://${jdbc.mydb.host}:3306/mydb