我有一个Spring 4 MVC Servlet,它使用JPA和spring-orm连接到数据库。我的applicationContext.xml
文件包含以下内容:
<util:map id="persistenceUnitConfiguration">
<entry key="javax.persistence.logging.level" value="INFO" />
<entry key="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<entry key="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/DATABASE" />
<entry key="javax.persistence.jdbc.user" value="USERNAME" />
<entry key="javax.persistence.jdbc.password" value="PASSWORD" />
<entry key="eclipselink.weaving" value="false" />
</util:map>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory">
<property name="persistenceUnitName" value="myPersistenceUnit" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="packagesToScan" value="my.package.entities" />
<property name="jpaPropertyMap" ref="persistenceUnitConfiguration" />
</bean>
应用程序打包为WAR。我想以某种方式配置DATABASE,USERNAME和PASSWORD值,以便我可以分发WAR,没有人必须触摸它。唯一要做的就是在某处编辑配置文件。
这样做的最佳方法是什么?
我可以在启动webapp的过程中以编程方式设置jpaPropertyMap,并从固定位置的配置文件中读取它吗?
答案 0 :(得分:1)
创建一个属性文件,如database.properties:
db.user=youruser
db.password=yourpassword
然后在Spring应用程序配置文件中添加
<context:property-placeholder location="classpath:my/package/config/database.properties" />
现在,您可以使用表达式语言语法访问属性:
<bean ...>
<property name="dbUser" value="${db.user}" />
<property name="dbPassword" value="${db.password}" />
</bean>
如果您正在使用注释配置,请使用
@Component
public class YourBean {
@Value( "${db.user}" )
private String dbUser;
@Value( "${db.password}" )
private String dbPassword;
}
适用于您的情况,它会(类似于更多字段)
<util:map id="persistenceUnitConfiguration">
<entry key="javax.persistence.logging.level" value="INFO" />
<entry key="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<entry key="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/DATABASE" />
<entry key="javax.persistence.jdbc.user" value="${db.user}" />
<entry key="javax.persistence.jdbc.password" value="${db.password}" />
<entry key="eclipselink.weaving" value="false" />
</util:map>
如果您的属性文件位于类路径之外,请改为使用file:
:
<context:property-placeholder location="file:/path/to/your/database.properties" />