我有一个在本地 tomcat 等上运行良好的 Spring MVC 应用程序。它是一个 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;
}
以上在.get(0)
mysqlServices 行越界失败。这是基于此处建议的答案。
我还尝试将数据源保留为它在本地运行的内容,以查看属性是否刚刚被注入,但那里也没有运气。(根据此处的 Spring 示例代码尝试了以下值,并且还使用了我的 db.connection 道具文件中的属性占位符)
@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 服务的名称,但这只是类似于 getServiceInfos(..) 方法的 NPE