Cloud Foundry提供的服務實例本質上就是訪問信息:IP、端口、用戶名、密碼等,使用的進程固然可以寫死在代碼或配置文件里,但是高級1點兒的辦法固然是讓程序可以自動依照環境適配服務實例信息,切換數據庫,消息中間件,云存儲等代碼連接的位置。這篇先寫1下在web.xml里配置了listener的spring程序如何自動獲得CF的服務實例信息,示例代碼由Maven管理。
在web.xml里配置了以下listener的spring程序,PaaS里綁定的服務信息可以被自動獲得,只需要在context配置文件中使用指定的語法定義bean便可。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
比如,要使用redis服務,只需在context配置文件中定義以下:
<cloud:redis-connection-factory id="redisConnectionFactory"/>
然后在程序中使用下面的代碼,便可取得綁定了的redis服務信息:
@Autowired(required=false) RedisConnectionFactory redisConnectionFactory;
Hostname = ((JedisConnectionFactory) redisConnectionFactory).getHostName();
Port = ((JedisConnectionFactory) redisConnectionFactory).getPort());
針對redis,這個bean可以直接通過spring-data-redis進行操作。
由于Spring與Cloud Foundry及其相干服務(如Redis)的兼容問題,不同版本的spring庫可能致使兼容性問題,比如spring 3.2.8和spring-cloud 1.0.0放在1起會致使綁定了redis服務的程序沒法在PaaS上啟動。確保可兼容的版本可參見樣例程序(是個Maven工程)的pom.xml。