SpringBootでredis構成アプリケーションを統合する.ymlファイル


前言
最近springbootでプロジェクトをしてredisを使い、初めてyml形式をプロファイルとして使いました.ここに私の使用過程とエラーを記録します.時間を節約して、穴を踏まないでほしい.
本文
最初のステップでは、mavenが依存をインポートします.
<dependency>
  <groupId>redis.clientsgroupId>
  <artifactId>jedisartifactId>
dependency>

第2のステップは、アプリケーションを構成する.ymlファイルのredis構成.
spring: 
 # redis
 redis:
   host: 127.0.0.1
   port: 6379
   timeout: 3
   # password:
   pool:
     minIdle: 1
     maxIdle: 10
     maxWait: 3
     maxActive: 8

ここでは特にymlファイルの書式に注意してください.コロン:の後ろには必ずスペースが付いていなければなりません.そうしないと、フォーマットが間違ってしまいます.また、特にインデント(スペースでインデント)に注意してください.ymlのすべてのレベル関係はインデントで完了します.これはxmlとは異なります.例えば、ここのredisはspringの下のサブセットに属し、host、port、timeout、poolはredisのサブセットである場合、.propertiesファイルで書くと、ここのhostはspring.redis.hostと書くべきである.
第3ステップではspringbootにredis構成クラスの読み取りを追加します.Springbootには強力な読み取り構成の注釈@ConfigurationPropertiesがあり、対応するクラスにこの注釈を追加し、接頭辞を明記するだけで、ymlファイル内のこの接頭辞の属性を自動的に読み取ることができます.次に、構成を読み込むクラスを示します.GetterSetterNoArgsConstructor注記ともにlombok簡略化コードを採用した結果、getter、setter、構造方法を手動で生成する手順を省略した.lombokについては、私の別のブログ:lombokプラグインを参照してください.
/**
 * Created by makersy on 2019
 */

@Component
@ConfigurationProperties(prefix = "spring.redis")
@Getter
@Setter
@NoArgsConstructor
public class RedisConfig {

    private String host;

    private int port;

    private int timeout;// 

    private String password;

    private HashMap<String, String> pool = new HashMap<>();

}


注意しなければならないのは、poolの下にサブセットがありますが、私たちの接頭辞はspring.redisに設定されています.poolの下の属性名を全部書くと、読めないに違いありません(私は最初からそうしていました...).ここでは,poolという属性集合を1つのHashMapで格納し,対応する値をとるにはHashmapのget( )メソッドを用いる.
ステップ4では、接続プールクラスをカプセル化して取得します.このクラスは、ymlファイルのredis構成を読み取り、これらのプロパティを持つJedisPoolを生成します.対応する属性を取得するコードと上のymlの属性設定を組み合わせて見ることができます.
/**
 * Created by makersy on 2019
 */

@Service
public class RedisPoolFactory {
    @Autowired
    RedisConfig redisConfig;

    @Bean
    public JedisPool JedisFactory() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(Integer.valueOf(redisConfig.getPool().get("maxActive")));
        poolConfig.setMaxIdle(Integer.valueOf(redisConfig.getPool().get("maxIdle")));
        poolConfig.setMaxWaitMillis(Integer.valueOf(redisConfig.getPool().get("maxWait")) * 1000);  //     ms,     
        poolConfig.setMinIdle(Integer.valueOf(redisConfig.getPool().get("minIdle")));
        return new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
                redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0);
    }

    
}

締めくくり
これまでspringbootとredisの統合が完了しました.