sql >> データベース >  >> NoSQL >> Redis

xmlでRedisと連携するようにSpringセッションを構成するにはどうすればよいですか?

    この問題を解決しました。まず、クラスをシリアライズ可能にします。これを行うには、次の投稿に従ってください:wsdlによって生成されるJavaクラスをSerializableにする方法

    次に、webapp /WEB-INFの下にredis-config.xmlを作成しました:

    <?xml version='1.0' encoding='UTF-8' ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
        <context:annotation-config/>
        <bean
                class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
        <bean id="jedisConnectionFactory"
              class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="127.0.0.1"
              p:port="6379" p:usePool="true" p:database="0"/>
    
    </beans>
    

    次に、web.xmlにいくつかの変更を加えました。セッションを保存するには、クラスorg.springframework.web.filter.DelegatingFilterProxyを持つspringSessionRepositoryFilterが必要です。しかし、私はこのクラスをweb.xmlに別のフィルター名で持っていました。プログラムを機能させるには、最初にspringSessionRepositoryFilterを作成する必要があります:

    <filter>
            <filter-name>springSessionRepositoryFilter</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
    <filter-mapping>
            <filter-name>springSessionRepositoryFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    

    次に、/ WEB-INF / redis-config.xml値をcontext-paramに追加しましたが、log4j2で問題が発生しました。そのため、log4j2のcontext-paramを上部に記述しました。

    <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:log4j.properties</param-value>
        </context-param>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring-security.xml
                /WEB-INF/applicationContext.xml
                /WEB-INF/redis-config.xml
            </param-value>
        </context-param>
    

    以上です。現在、セッションはRedisに保存されています

    編集 :上記のコードは、ローカルのRedisでのみ機能していました。リモートRedisサーバーを作成すると、次のような例外がスローされます。キースペース通知にRedisを構成できません。これを解決するために、redis-config.xmlを次のように変更しました。

    <?xml version='1.0' encoding='UTF-8' ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    
        <context:annotation-config/>
        <bean
                class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" p:configureRedisAction-ref="configureRedisAction" />
        <util:constant id="configureRedisAction"
                static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
        <bean id="jedisConnectionFactory"
              class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="xxx.xxx.xx.xxx"
              p:port="6379" p:usePool="true" p:database="0" p:password="xxx"/>
    </beans>
    

    依存関係のいくつかの新しいバージョンが互いに機能しないことを言及するのを忘れました。 redisの依存関係は次のようになります:

    <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-redis</artifactId>
                <version>1.8.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session</artifactId>
                <version>1.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
                <version>1.2.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>io.lettuce</groupId>
                <artifactId>lettuce-core</artifactId>
                <version>5.1.1.RELEASE</version>
            </dependency>
    



    1. マングーススキーマで別のスキーマを参照するにはどうすればよいですか?

    2. redisの2セットに750アイテムを挿入しようとするとStackExchangeTimeoutExceptionが発生します

    3. Sinonを使用したJavaScriptでのRedisインタラクションのスタブ

    4. Redis-戻り値としてのLuaテーブル-これが機能しないのはなぜですか