詳解springboot配置多個(gè)redis連接
一、springboot nosql 簡(jiǎn)介
Spring Data提供其他項(xiàng)目,用來(lái)幫你使用各種各樣的NoSQL技術(shù),包括MongoDB, Neo4J, Elasticsearch, Solr, Redis,Gemfire, Couchbase和Cassandra。Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動(dòng)配置。你可以充分利用其他項(xiàng)目,但你需要自己配置它們。
1.1、Redis
Redis是一個(gè)緩存,消息中間件及具有豐富特性的鍵值存儲(chǔ)系統(tǒng)。Spring Boot為Jedis客戶端庫(kù)和由Spring Data Redis提供的基于Jedis客戶端的抽象提供自動(dòng)配置。 spring-boot-starter-redis 'Starter POM'為收集依賴(lài)提供一種便利的方式。
Redis添加maven依賴(lài)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- <version>1.3.5.RELEASE</version> --> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <!-- <version>1.3.6.RELEASE</version> --> </dependency>
1.2連接Redis
你可以注入一個(gè)自動(dòng)配置的RedisConnectionFactory,StringRedisTemplate或普通的跟其他Spring Bean相同的RedisTemplate實(shí)例。默認(rèn)情況下,這個(gè)實(shí)例將嘗試使用localhost:6379連接Redis服務(wù)器。
@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}
如果你添加一個(gè)你自己的任何自動(dòng)配置類(lèi)型的@Bean,它將替換默認(rèn)的(除了RedisTemplate的情況,它是根據(jù)bean的名稱(chēng)'redisTemplate'而不是它的類(lèi)型進(jìn)行排除的)。如果在classpath路徑下存在commons-pool2,默認(rèn)你會(huì)獲得一個(gè)連接池工廠。
1.3 建立多個(gè)redis連接
使用redis的默認(rèn)配置可以連接到redis中的0庫(kù)中,如果指定庫(kù)連接需要配置indexdb,同時(shí)如果需要連接多個(gè)redis服務(wù),也需要同時(shí)配置多個(gè)數(shù)據(jù)源
1.3.1、application.yml 文件 中增加:
@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}
1.3.2、創(chuàng)建redisconfiguration
@Configuration
public class Redis137_11Configuration {
@Bean(name = "redis123Template")
public StringRedisTemplate redisTemplate(
@Value("${redis123.hostName}") String hostName,
@Value("${redis123.port}") int port,
@Value("${redis123.password}") String password,
@Value("${redis123.maxIdle}") int maxIdle,
@Value("${redis123.maxTotal}") int maxTotal,
@Value("${redis123.index}") int index,
@Value("${redis123.maxWaitMillis}") long maxWaitMillis,
@Value("${redis123.testOnBorrow}") boolean testOnBorrow) {
StringRedisTemplate temple = new StringRedisTemplate();
temple.setConnectionFactory(connectionFactory(hostName, port, password,
maxIdle, maxTotal, index, maxWaitMillis, testOnBorrow));
return temple;
}
public RedisConnectionFactory connectionFactory(String hostName, int port,
String password, int maxIdle, int maxTotal, int index,
long maxWaitMillis, boolean testOnBorrow) {
JedisConnectionFactory jedis = new JedisConnectionFactory();
jedis.setHostName(hostName);
jedis.setPort(port);
if (!StringUtils.isEmpty(password)) {
jedis.setPassword(password);
}
if (index != 0) {
jedis.setDatabase(index);
}
jedis.setPoolConfig(poolCofig(maxIdle, maxTotal, maxWaitMillis,
testOnBorrow));
// 初始化連接pool
jedis.afterPropertiesSet();
RedisConnectionFactory factory = jedis;
return factory;
}
public JedisPoolConfig poolCofig(int maxIdle, int maxTotal,
long maxWaitMillis, boolean testOnBorrow) {
JedisPoolConfig poolCofig = new JedisPoolConfig();
poolCofig.setMaxIdle(maxIdle);
poolCofig.setMaxTotal(maxTotal);
poolCofig.setMaxWaitMillis(maxWaitMillis);
poolCofig.setTestOnBorrow(testOnBorrow);
return poolCofig;
}
}
1.3.3、聲明redis抽象基類(lèi),創(chuàng)建redis的操作方法
public abstract class AbRedisConfiguration {
protected StringRedisTemplate temple;
public void setData(String key, String value) {
getTemple().opsForValue().set(key, value);
}
public String getData(String key) {
return getTemple().opsForValue().get(key);
}
public StringRedisTemplate getTemple() {
return temple;
}
}
1.3.4、根據(jù)數(shù)據(jù)源,創(chuàng)建不同的子類(lèi)@Component
public class Redis123 extends AbRedisConfiguration {
@Resource(name = "redis123Template")
private StringRedisTemplate temple;
public StringRedisTemplate getTemple() {
return temple;
}
}
ps:類(lèi)和子類(lèi)中同時(shí)聲明了getTemple方法和 StringRedisTemple屬性,子類(lèi)通過(guò)重寫(xiě)父類(lèi)的getTeimple方法,把子類(lèi)的自己StringRedisTemple 屬性 傳給 父類(lèi),父類(lèi)通過(guò)子類(lèi)傳遞過(guò)來(lái)的StringRedisTemple使用不通的數(shù)據(jù)鏈接來(lái)操作緩存。至此,父類(lèi)完成所有的操作方法,而當(dāng)需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接時(shí),只需要在創(chuàng)建一個(gè)子類(lèi),被聲明自己的StringRedisTemple,并傳給父類(lèi)即可。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中List與數(shù)組相互轉(zhuǎn)換實(shí)例分析
這篇文章主要介紹了Java中List與數(shù)組相互轉(zhuǎn)換的方法,實(shí)例分析了Java中List與數(shù)組相互轉(zhuǎn)換中容易出現(xiàn)的問(wèn)題與相關(guān)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
SpringBoot集成DJL實(shí)現(xiàn)圖片分類(lèi)功能
DJL是一個(gè)使用Java?API簡(jiǎn)化模型訓(xùn)練、測(cè)試、部署和使用深度學(xué)習(xí)模型進(jìn)行推理的開(kāi)源庫(kù)深度學(xué)習(xí)工具包,開(kāi)源的許可協(xié)議是Apache-2.0,本文給大家介紹了SpringBoot集成DJL實(shí)現(xiàn)圖片分類(lèi)功能,需要的朋友可以參考下2024-10-10
java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)
下面小編就為大家?guī)?lái)一篇java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Java concurrency線程池之線程池原理(三)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理第三篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
SpringBoot訪問(wèn)靜態(tài)資源的配置及順序說(shuō)明
這篇文章主要介紹了SpringBoot訪問(wèn)靜態(tài)資源的配置及順序說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring Security 和Apache Shiro你需要具備哪些條件
這篇文章主要介紹了Spring Security 和Apache Shiro你需要具備哪些條件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
解析Oracle數(shù)據(jù)庫(kù)中的對(duì)象集合schema
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)中的對(duì)象集合schema,是Oracle數(shù)據(jù)庫(kù)入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11

