Cloudfoundry中的Spring应用程序无法读取云属性

时间:2015-07-30 20:46:23

标签: java spring spring-mvc cloudfoundry

我正在Cloudfoundry中部署一个需要访问mysql数据库的Spring应用程序。现在根据tutorial,如果spring版本高于3.1,我可以使用云的配置文件,云属性将可用于应用程序。在我的情况下,mysql服务注册为p-mysql,所以我的spring配置看起来像这样

 <beans profile="cloud">
    <context:property-placeholder location="classpath:/app.conf" />
     <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer" 
          p:location="file:#{systemProperties['app.conf']}" />
     <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- DB connection properties -->
    <property name="driverClass" value="${db_driver:oracle.jdbc.OracleDriver}" />
    <property name="jdbcUrl" value="${cloud.services.p-mysql.connection.jdbcUrl}" />
    <property name="user" value="${cloud.services.p-mysql.connection.username}" />
    <property name="password" value="${cloud.services.p-mysql.connection.password}" />

</bean>

</beans>

我需要app.conf来获取与db服务无关的其他密钥。当我部署这个我得到错误

OUT org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'datasource' defined in URL  [jar:file:/home/vcap/app/.java-buildpack/tomcat/webapps/ROOT/WEB-INF/lib/test-server-1.3.0.BUILD-SNAPSHOT.jar!/spring-bootstrap.xml]: Could not resolve placeholder 'cloud.services.p-mysql.connection.jdbcUrl'  

我有什么遗漏,当我寻找应用程序的环境时,我确实看到应用程序的属性可用(cf env app_name)

我可能错过了什么?我必须包括

  1. 我现在没有的pom中的cloudfoundry-runtime?
  2. 或在spring app中包含云名称空间

1 个答案:

答案 0 :(得分:1)

提及cloudfoundry-runtime的任何文档都已过时。 current documentation建议在Cloud Foundry上为Spring应用程序使用Spring Cloud Connectors。

你应该include Spring Cloud Connectors in your project,然后你可以做一些简单的事情:

<cloud:data-source id="datasource" service-name="mysql-service"/>

如果您真的需要更多控制,也可以使用属性占位符自己创建datasource bean。有关通过XML配置Spring Cloud Connectors的其他文档,请访问:https://github.com/spring-cloud/spring-cloud-connectors/tree/master/spring-cloud-spring-service-connector#the-cloud-namespace