Maison  >  Article  >  Java  >  Analyse approfondie de la façon dont Springboot configure plusieurs connexions Redis

Analyse approfondie de la façon dont Springboot configure plusieurs connexions Redis

Y2J
Y2Joriginal
2017-05-04 10:18:303793parcourir

Spring Boot fournit une configuration automatique pour Redis, MongoDB, Elasticsearch, Solr et Gemfire. Cet article présente en détail la configuration de plusieurs connexions Redis dans Springboot. Ceux qui sont intéressés peuvent en savoir plus.

1. Springboot nosql Introduction

Spring Data fournit d'autres projets pour vous aider à utiliser diverses technologies NoSQL, notamment MongoDB, Neo4J, Elasticsearch, Solr, Redis, Gemfire, Couchbase et Cassandra. Spring Boot fournit une configuration automatique pour Redis, MongoDB, Elasticsearch, Solr et Gemfire. Vous pouvez profiter pleinement d’autres projets, mais vous devez les configurer vous-même.

1.1, Redis

Redis est un cache, un middleware de messages et un système de stockage clé-valeur doté de fonctionnalités riches. Spring Boot fournit une configuration automatique pour la bibliothèque client Jedis et les abstractions basées sur le client Jedis fournies par Spring Data Redis. spring-boot-starter-redis 'Starter POM' fournit un moyen pratique de collecter les dépendances.
Redis ajoute une dépendance maven

   <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 Connect Redis

Vous pouvez injecter une RedisConnectionFactory, StringRedisTemplate ou la même chose que les autres instances Spring Beans RedisTemplate configurées automatiquement. Par défaut, cette instance tentera de se connecter au serveur Redis à l'aide de localhost:6379.

@Component 
public class MyBean { 
private StringRedisTemplate template; 
@Autowired 
public MyBean(StringRedisTemplate template) { 
this.template = template; 
} 
// ... 
}

Si vous ajoutez votre propre @Bean de n'importe quel type configuré automatiquement, il remplacera celui par défaut (sauf dans le cas de RedisTemplate, qui est basé sur le nom du bean 'redisTemplate ' plutôt que son type exclu). Si commons-pool2 existe dans le chemin de classe, vous obtiendrez une fabrique de pool de connexions par défaut.

1.3 Établir plusieurs connexions Redis

En utilisant la configuration par défaut de Redis, vous pouvez vous connecter à la bibliothèque 0 dans Redis. Si vous spécifiez une connexion à la bibliothèque, vous devez configurer indexdb en même temps, si vous devez connecter plusieurs services Redis, vous devez également configurer plusieurs sources de données en même temps

1.3.1 Ajoutez ce qui suit au fichier application.yml. fichier :

@Component 
public class MyBean { 
private StringRedisTemplate template; 
@Autowired 
public MyBean(StringRedisTemplate template) { 
this.template = template; 
} 
// ... 
}

1.3.2. Créer une configuration redis

@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 Déclarez la classe de base abstraite redis et créez des méthodes d'opération 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. Créer différentes sous-classes @Component

selon la source de données
public class Redis123 extends AbRedisConfiguration { 
 
  @Resource(name = "redis123Template") 
  private StringRedisTemplate temple; 
 
  public StringRedisTemplate getTemple() { 
    return temple; 
  } 
}

ps : La méthode getTemple et l'attribut StringRedisTemple sont tous deux déclarés dans la classe et la sous-classe. propre attribut StringRedisTemple de la sous-classe à la classe parent en remplaçant la méthode getTeimple de la classe parent, le StringRedisTemple transmis de la classe parent via la sous-classe utilise différentes liaisons de données pour faire fonctionner le cache. À ce stade, la classe parent a terminé toutes les méthodes d'opération et lorsque vous devez créer une connexion à la base de données, il vous suffit de créer une sous-classe, de déclarer son propre StringRedisTemple et de la transmettre à la classe parent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn