CloudFoundry MySQL Java配置

时间:2013-04-01 18:24:42

标签: mysql spring spring-mvc cloud cloudfoundry

我有一个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(..)方法

1 个答案:

答案 0 :(得分:1)

好吧,这只是一个愚蠢的错误 - 当我通过STS部署应用程序时,我选择了Java Web应用程序而不是“Spring”类型。不知道为什么会让CloudEnvironment属性不可用(我的印象是方法是在非Spring应用程序中注入细节的常用方法) - 但是作为Spring应用程序重新部署到服务器解决了probs !