Java 在Spring中使用系统重写属性
我开发了一个将在AWS BeanStalk上运行的rest WS 目前,数据源配置了属性文件:Java 在Spring中使用系统重写属性,java,spring,amazon-web-services,amazon-elastic-beanstalk,Java,Spring,Amazon Web Services,Amazon Elastic Beanstalk,我开发了一个将在AWS BeanStalk上运行的rest 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="
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}"/>
....
在prepod.property
或者在context.xml中用系统属性重置database.jdbcUrl?您可以这样做
<context:property-placeholder ignore-unresolvable="true" ignore-resource-not-found="true" location="classpath:database.properties, file:preProd.properties" />
和prepod.properties将在prepod机器上。键将相同,但值将不同。这样,如果找不到prepod.properties(例如在dev机器上),将使用database.properties。如果存在文件prepod.properties,它将覆盖database.properties中的值
如果您使用的是maven,您还可以使用maven配置文件和maven替换插件。您可以这样做
<context:property-placeholder ignore-unresolvable="true" ignore-resource-not-found="true" location="classpath:database.properties, file:preProd.properties" />
和prepod.properties将在prepod机器上。键将相同,但值将不同。这样,如果找不到prepod.properties(例如在dev机器上),将使用database.properties。如果存在文件prepod.properties,它将覆盖database.properties中的值
如果您使用的是maven,那么您也可以使用maven profile和maven replacer插件。在命令行上设置属性是否有效?您使用的是什么构建工具?编写脚本以根据输出目标生成自定义属性文件非常简单。@mttdbrd:我更喜欢使用一个war来加载依赖于spring.profiles.active的上下文。@chrylis:我从你的评论和mttdbrd的评论中看到了,我忘了说它是一个webapp:pYes,我是说你为像Maven这样的人设定了一个目标“预打印“它会自动创建正确的属性文件,并在一场战争中填充它。如果使用得当,单个生成工具可以生成具有正确的.test、local、prepod、prod等属性的正确war文件。在命令行上设置属性是否有效?您使用的是什么生成工具?编写脚本以根据输出目标生成自定义属性文件非常简单。@mttdbrd:我更喜欢使用一个war来加载依赖于spring.profiles.active的上下文。@chrylis:我从你的评论和mttdbrd的评论中看到了,我忘了说它是一个webapp:pYes,我是说你为像Maven这样的人设定了一个目标“预打印“它会自动创建正确的属性文件,并在一场战争中填充它。如果使用得当,单个构建工具可以为test、local、prepod、prod等生成具有正确.properties的正确war文件。Maven似乎是一种方法。不确定OP是否在使用它,但这正是Maven设计用来解决的问题。我相信你也可以用Gradle做同样的事情,但我不知道怎么做。它不适用,因为目标是部署在beanstalk上,它会创建一个RDS,并为我们提供系统属性。ops只想部署一个war文件,没有任何构建系统。他们是如何获得war文件的?你必须做一些构建才能达到这一点。我想说的是在一切准备就绪之前进行干预。马文似乎是解决问题的方法。不确定OP是否在使用它,但这正是Maven设计用来解决的问题。我相信你也可以用Gradle做同样的事情,但我不知道怎么做。它不适用,因为目标是部署在beanstalk上,它会创建一个RDS,并为我们提供系统属性。ops只想部署一个war文件,没有任何构建系统。他们是如何获得war文件的?你必须做一些构建才能达到这一点。我想说的是在一切都打包好之前进行干预。