1

ローカルの tomcat などで正常に動作する Spring MVC アプリがあります。Spring 3.1 MVC/Hibernate アプリです。

私は(可能な場合)アプリに純粋な Java @Configuration を使用しています - そして現在、アプリを CloudFoundry に(STS 経由で)デプロイしようとしていますが、MySql db を構成するのに苦労しています(メモリから、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 サンプル コード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;
}

編集

また、作成してアプリケーションにバインドした MySql サービスの名前を渡す getServiceInfo(String, Class) メソッドを使用しましたが、これは getServiceInfos(..) アプローチと同様の NPE に過ぎません。

4

1 に答える 1

1

わかりました、これはばかげた間違いでした。STS 経由でアプリをデプロイしたときに、「Spring」タイプではなく Java Web アプリを選択していました。CloudEnvironment プロパティが利用できなくなる理由がわかりません (Spring 以外のアプリに詳細を挿入するための一般的な方法がアプローチであるという印象を受けました) - しかし、Spring アプリとしてサーバーに再デプロイすると問題が解決しました!

于 2013-04-01T19:35:08.573 に答える