我正在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)
我可能错过了什么?我必须包括
答案 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