Skip to content

为你的项目提供更好的配置支持

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

返回

Clone this wiki locally