使用Spring中的System覆盖属性

时间:2014-03-17 14:14:02

标签: java spring amazon-web-services elastic-beanstalk

我开发了一个将在AWS BeanStalk上运行的休息WS。

目前,数据源配置了属性文件:

database.driverClass=org.postgresql.Driver
database.jdbcUrl=jdbc:postgresql://localhost:5432/public
database.username=postgres
database.password=postgres

在context.xml中:

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
    <property name="driverClass" value="${database.driverClass}" />
    <property name="jdbcUrl" value="${database.jdbcUrl}"/>
....

但现在,我需要使用AWS Beanstalk进行preprod环境,以暴露我的系统属性,如RDS_HOSTNAME,RDS_PORT,RDS_DB_NAME ......

有没有办法保持相同的系统,比如写

database.jdbcUrl=jdbc:postgresql://#{RDS_HOSTNAME}:#{RDS_PORT}/#{RDS_DB_NAME}

在preprod.property?

或者在context.xml中用system属性重置database.jdbcUrl?

1 个答案:

答案 0 :(得分:4)

你可以做到

   <context:property-placeholder ignore-unresolvable="true" ignore-resource-not-found="true" location="classpath:database.properties, file:preProd.properties" />

preProd.properties将在preprod机器上。键将是相同的,但值将是不同的。这样,如果找不到preProd.properties(例如在dev机器上),将使用database.properties。如果文件preProd.properties存在,它将覆盖database.properties中的值。

如果你正在使用maven,你也可以使用maven profile和maven-replacer-plugin。