我有一个Spring MVC应用程序在本地tomcat等运行正常。它是一个Spring 3.1 MVC / Hibernate应用程序。
我正在使用(如果可能)应用程序的纯Java @Configuration - 我现在正在尝试将应用程序部署到CloudFoundry(通过STS),但我正在努力配置MySql数据库(来自内存,使用xml)配置你不需要做任何事情和Spring / CloudFoundry自动注入所需的用户/密码等,但它已经有一段时间了,因为我部署了任何东西到CF)。
我尝试了以下两种配置:
@Bean
public BasicDataSource dataSource() throws PropertyVetoException {
//CloudFoundry config
final CloudEnvironment cloudEnvironment = new CloudEnvironment();
final List<MysqlServiceInfo> mysqlServices = cloudEnvironment.getServiceInfos(MysqlServiceInfo.class);
final MysqlServiceInfo serviceInfo = mysqlServices.get(0);
BasicDataSource bean = new BasicDataSource();
bean.setDriverClassName("com.mysql.jdbc.Driver");
bean.setUrl(serviceInfo.getUrl());
bean.setUsername(serviceInfo.getUserName());
bean.setPassword(serviceInfo.getPassword());
return bean;
}
上面的错误是在mysqlServices的.get(0)
行超出界限。这是基于建议的答案here。
我还尝试将数据源保留为本地运行的数据源,以查看属性是否被注入,但也没有运气。 (根据Spring示例代码here尝试了以下值,并使用db.connection props文件中的属性占位符)
@Bean
public BasicDataSource dataSource() throws PropertyVetoException {
BasicDataSource bean = new BasicDataSource();
bean.setDriverClassName("com.mysql.jdbc.Driver");
bean.setUrl("");
bean.setUsername("spring");
bean.setPassword("spring");
return bean;
}
修改
我还使用了getServiceInfo(String,Class)方法传递我创建并绑定到应用程序的MySql服务的名称,但只是NPE类似于getServiceInfos(..)方法
答案 0 :(得分:1)
好吧,这只是一个愚蠢的错误 - 当我通过STS部署应用程序时,我选择了Java Web应用程序而不是“Spring”类型。不知道为什么会让CloudEnvironment属性不可用(我的印象是方法是在非Spring应用程序中注入细节的常用方法) - 但是作为Spring应用程序重新部署到服务器解决了probs !