0

Redis キーと値のペアの文字列と整数値に Redis を使用したい Spring-MVC アプリケーションに取り組んでいます。私の意図は、文字列を渡すたびに整数を取得することです。試行している構成が正しいかどうかを確認しようとすると、エラーが発生します。

2 つの問題があります。プロジェクトを実行して構成が正しいかどうかを確認しようとすると、エラーが発生します (以下にエラー ログが投稿されています)。次に、XML ファイルを渡してコンテキストを取得する以外に、Spring から UserAppRegistration インスタンスのインスタンスを取得する方法がわかりません。このアプローチは私にはうまくいきませんでした。

エラーログ :

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userAppRegistration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.redis.core.RedisTemplate com.journaldev.spring.service.UserAppRegistration.redisTemplate; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplate' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.data.redis.connection.RedisConnectionFactory' for property 'connectionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.data.redis.connection.RedisConnectionFactory] for property 'connectionFactory': no matching editors or conversion strategy found
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.redis.core.RedisTemplate com.journaldev.spring.service.UserAppRegistration.redisTemplate; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplate' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.data.redis.connection.RedisConnectionFactory' for property 'connectionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.data.redis.connection.RedisConnectionFactory] for property 'connectionFactory': no matching editors or conversion strategy found
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplate' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.data.redis.connection.RedisConnectionFactory' for property 'connectionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.data.redis.connection.RedisConnectionFactory] for property 'connectionFactory': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

コンポーネント クラス。Service フォルダーにこのクラスがあることに注意してください。

@Component
public class UserAppRegistration {

    @Autowired
    private RedisTemplate<String,Integer> redisTemplate;

    public RedisTemplate<String, Integer> getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate<String, Integer> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

}

root-context.xml の Redis 構成:

 <!-- Configuration for Spring-Data-Redis -->
    <beans:bean id="jedisConnFactory"
                class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:usePool="true"/>

    <beans:bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory="jedisConnFactory"/>

ここで、UserAppRegistration コンポーネントを取得して、そこから値をプッシュおよびプルしたいと思います。提案された方法はこれでした:

public static UserAppRegistration userAppRegistration;

public static ClassPathXmlApplicationContext context;

static {
   context = new ClassPathXmlApplicationContext("root-context.xml");
      }

何らかの理由で、この方法は以前はうまくいきませんでした。xml が見つかりません。多くのパスを試しました。より良い代替手段があれば、知りたいです。どうもありがとう。さらに情報が必要な場合は、お知らせください。どうもありがとう。

4

2 に答える 2

1

application.propertiesでも​​設定できます。

spring.redis.host=localhost
spring.redis.password=secret
spring.redis.port=6379
于 2015-11-18T20:07:26.210 に答える
1

この行は間違っています:-

 <beans:bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory="jedisConnFactory"/>

上記の代わりに、次のようにする必要があります:-

 <beans:bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnFactory"/>

以下のように UserAppRegistration Bean を取得できます。

UserAppRegistration bean = (UserAppRegistration)context.getBean("userAppRegistration");

完全なパスから xml をロードするには:-

context = new FileSystemXmlApplicationContext("C:/Users/project/root-context.xml");
于 2015-08-19T07:54:09.463 に答える