Wie autowired RedisTemplate<String,Long>
Möchte ich RedisTemplate auf spring boot.
Ich kann verwenden StringRedeisTemplate erfolgreich, aber wenn ich nicht verwenden RedisTemplate .
hier ist der code.
@Service
public class MyService {
@Autowired
private RedisTemplate<String, Long> template;
public void execute() {
template.opsForValue().set("hoge", 1l);
}
}
Aber, wenn apps starten, erhalten Sie Fehler.
> Exception in thread "main"
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'MyService': Injection of autowired
> dependencies failed; nested exception is
> org.springframework.beans.factory.BeanCreationException: Could not
> autowire field: private
> org.springframework.data.redis.core.RedisTemplate
> org.hoge.service.MyService.template; nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type
> [org.springframework.data.redis.core.RedisTemplate] found for
> dependency: expected at least 1 bean which qualifies as autowire
> candidate for this dependency. Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true)}
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
> at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109)
> at
> org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
> at
> jp.bizreach.davide.recommend.application.DavimendApplication.main(DavimendApplication.java:11)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:483) at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
> Caused by: org.springframework.beans.factory.BeanCreationException:
> Could not autowire field: private
> org.springframework.data.redis.core.RedisTemplate
> org.hoge.service.MyService.template; nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type
> [org.springframework.data.redis.core.RedisTemplate] found for
> dependency: expected at least 1 bean which qualifies as autowire
> candidate for this dependency. Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true)}
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:558)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
> ... 21 more Caused by:
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type
> [org.springframework.data.redis.core.RedisTemplate] found for
> dependency: expected at least 1 bean which qualifies as autowire
> candidate for this dependency. Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true)}
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:530)
> ... 23 more
- Haben Sie die Bohne in Ihrer xml? Wenn ja, dann Könnte Sie kopieren und einfügen, fügen Sie den entsprechenden code.
- I dont Verwendung von xml.Ich benutze automatische Konfiguration von spring boot
- können Sie fügen Sie Ihre Spring-boot-configurtion,wo Sie haben festgelegt, Ihre redistemplate?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den stacktrace vorschlagen, dass Sie noch nicht definiert, die Bohnen, die Sie mögen, verwenden Sie für die Injektion in
RedisTemplate
.Sie können es beheben, erstellen Sie eine Konfigurationsdatei, E. g.Sobald Sie die Konfiguration-Datei, dann müssen Sie gehen Sie zu
SpringApplication.run
E. g.template.setConnectionFactory( new JedisConnectionFactory() );
JedisConnectionFactory
an vielen stellen , dann fühlen Sie sich frei, um inline-esWenn Sie Spring boot, hinzufügen einer Abhängigkeit zu spring-boot-starter-redis, die bringen in der redisTemplate bean. Jedoch, dass die bean ist vom Typ
RedisTemplate<Object, Object>
,So erstellen Sie eine andere Bohne für die Operationen, die Sie brauchen, wie hier gezeigt geben Sie den link-Beschreibung hier
Können Sie tun, was
sol4me
sagte auf der Oberseite, aber man kann damit umgehen in einer einfachen Weise:1, auto-Draht
RedisTemplate
2, Satz Wert wie diese:
3, bekommen Wert wie diese:
Keine Notwendigkeit, erstellen Sie eine Bohne wie
RedisTemplate< String, Long >
, wenn Sie dies tun möchten, das können Sie erstellen eine Menge von Bohnen, die in Ihrem system. So einfach nutzen Sie den einfachen Weg.Geben etwas anderes, als jetzt ist 2018(etwas ändert sich eine Menge, die blockiert mich für eine lange Zeit)
Ersten
Dependency
(Gradle)RedisServer
Redis config
verwenden RedisTemplate
verwenden redisTemplate
Wenn Sie bei der Ringfeder-injection-Fehler, sollten die setter-Injektion, @Lazy, @PostConstructor oder implementiert ApplicationContextAware, InitalizingBean, für weitere Informationen surfen diesen link wie man dieses Problem beheben