ローカルの 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 に過ぎません。