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