2017-11-09 22 views
0

SpringデータMongoDBとSpring Data Redisという2つのSpringデータモジュールをアプリケーションに統合しました。SpringデータRedisがRestTemplateを初期化しない

Spring Data MongoDBモジュールは魅力的な働きをしていますが、私はRedisとのやりとりに必要なRestTemplate Beanの配線に関連する問題のため、Spring Data Redisに苦労しています。

春ブーツアプリは、私は次のエラーで終わるよ、起動すると:

*************************** APPLICATION FAILED TO START


Description:

Parameter 0 of constructor in com.github.wjoz.talkative.messageService.repository.redis.impl.RedisMessageRepositoryImpl required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found. - Bean method 'redisTemplate' in 'RedisAutoConfiguration.RedisConfiguration' not loaded because @ConditionalOnMissingBean (names: redisTemplate; SearchStrategy: all) found bean 'redisTemplate'

Action:

Consider revisiting the conditions above or defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.

Springのは、私がredisTemplate(でデバッグするときにBeanが)、しかし、インスタンス化することができない、Beanがあると言って実行がそこで停止するので、BeanFactory(IoC Container)で作成されインスタンス化されます。

それがログに述べていますように、バネのデータは、厳格なリポジトリコンフィギュレーションモードに入っているので、私は、2つの春データモジュールを得た:春データのRedisのために

Multiple Spring Data modules found, entering strict repository configuration mode!

を私がリポジトリでもどちらを使用していませんよCrudRepositoryインタフェースは、その代わり、私が原因ここで言及した問題のために、プレーン@Repository注釈でそれを実装しました: Repositories - Multiple Modules

私はどこかで春のブートスターターでバージョンの競合に問題があるかもしれないと思います。私はそれを理解することはできません。

ありがとうございます。

のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.github.wjoz</groupId> 
<artifactId>talkative-message-service</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>talkative-message-service</name> 

<properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <spring.version>5.0.1.RELEASE</spring.version> 
    <spring.security.jwt.version>1.0.7.RELEASE</spring.security.jwt.version> 
    <spring.cloud.starter.version>1.2.3.RELEASE</spring.cloud.starter.version> 
    <spring.cloud.eureka.server.version>1.3.4.RELEASE</spring.cloud.eureka.server.version> 
    <oauth.version>2.0.12.RELEASE</oauth.version> 
    <modelmapper.version>0.7.7</modelmapper.version> 
    <junit.version>4.12</junit.version> 
    <h2.version>1.4.193</h2.version> 
    <log4j2.version>2.8.1</log4j2.version> 
    <jackson.version>2.8.7</jackson.version> 
    <apachecommons.version>2.5</apachecommons.version> 
</properties> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.8.RELEASE</version> 
</parent> 

<dependencies> 
    <!-- Setup Spring Boot --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 

    <!-- Setup Spring MVC & REST, use Embedded Tomcat --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
    </dependency> 

    <!-- Spring Cloud starter --> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter</artifactId> 
     <version>${spring.cloud.starter.version}</version> 
    </dependency> 

    <!-- Spring Data Redis --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-redis</artifactId> 
    </dependency> 

    <!-- Spring Data MongoDB --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
    </dependency> 

    <!-- Spring Boot Starter Security --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 

    <!-- Spring Boot Starter Security OAuth 2 --> 
    <dependency> 
     <groupId>org.springframework.security.oauth</groupId> 
     <artifactId>spring-security-oauth2</artifactId> 
     <version>${oauth.version}</version> 
    </dependency> 

    <!-- Spring Test Framework --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Spring Security module for JSON Web Token support --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-jwt</artifactId> 
     <version>${spring.security.jwt.version}</version> 
    </dependency> 

    <!-- Eureka for service registration --> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-eureka-server</artifactId> 
     <version>${spring.cloud.eureka.server.version}</version> 
    </dependency> 

    <!-- ModelMapper for DTO/Domain object conversion --> 
    <dependency> 
     <groupId>org.modelmapper</groupId> 
     <artifactId>modelmapper</artifactId> 
     <version>${modelmapper.version}</version> 
    </dependency> 

    <!-- JUnit --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <!-- Embedded Redis for integration tests --> 
    <dependency> 
     <groupId>it.ozimov</groupId> 
     <artifactId>embedded-redis</artifactId> 
     <version>0.7.1</version> 
     <scope>test</scope> 
    </dependency> 

    <!-- Spring Boot Hot Swap --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-devtools</artifactId> 
     <optional>true</optional> 
    </dependency> 

    <!-- Log4j 2 API --> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>${log4j2.version}</version> 
    </dependency> 

    <!-- Log4j 2 Core --> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>${log4j2.version}</version> 
    </dependency> 

    <!-- Log4j 2 YAML support --> 
    <dependency> 
     <groupId>com.fasterxml.jackson.dataformat</groupId> 
     <artifactId>jackson-dataformat-yaml</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>${apachecommons.version}</version> 
    </dependency> 

</dependencies> 

<build> 
    <resources> 
     <!--<resource>--> 
     <!--<directory>src/main/resources</directory>--> 
     <!--<filtering>true</filtering>--> 
     <!--<excludes>--> 
     <!--<exclude>*.jks</exclude>--> 
     <!--</excludes>--> 
     <!--</resource>--> 
    </resources> 
    <plugins> 
     <!-- Package as an executable jar --> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <addResources>true</addResources> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

BaseAppConfig - コンフィギュレーションクラス

@Configuration 
    @Profile({ApplicationProfiles.DEVELOPMENT, ApplicationProfiles.PRODUCTION}) 
    @EnableMongoRepositories(basePackages = Packages.MONGO_REPOSITORY) 
    public class BaseAppConfig { 

     /** 
     * Configures the Java client for Redis. 
     * @return the Java Redis client object 
     */ 
     @Bean 
     public JedisConnectionFactory jedisConnectionFactory() { 
      return new JedisConnectionFactory(); 
     } 

     /** 
     * Provides the central class of the Redis module for Redis interactions. 
     * @return the Redis interaction class 
     */ 
     @Bean 
     public RedisTemplate<String, Object> redisTemplate() { 
      RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); 
      redisTemplate.setConnectionFactory(jedisConnectionFactory()); 
      return redisTemplate; 
     } 
    } 

MongoMessageRepository

public interface MongoMessageRepository extends CrudRepository<Message, String> { 

    } 

RedisMessageRepositoryImpl - 私はRestTemplateをautowireしようと

@Repository 
public class RedisMessageRepositoryImpl implements RedisMessageRepository { 

    private static final String KEY = "Message"; 
    private final RedisTemplate<String, Message> redisTemplate; 
    private HashOperations<String, String, Message> hashOperations; 

    @Inject 
    private RedisMessageRepositoryImpl(RedisTemplate<String, Message> redisTemplate) { 
     this.redisTemplate = redisTemplate; 
    } 

    @Override 
    public void save(Message message) { 
     hashOperations.put(KEY, message.getId(), message); 
    } 
} 

UPDATE:私はしました、

@EnableDiscoveryClient 
@SpringBootApplication(scanBasePackages = Packages.COMPONENT_ROOT) 
@EnableFeignClients 
public class MessageServer { 
    public static void main(String[] args) { 
     SpringApplication.run(MessageServer.class, args); 
    } 
} 
+0

メインクラスコードも共有できますか? – MohamedSanaulla

+0

@reply 私は元の投稿にメインクラスを追加しました:) – Wjoz

答えて

0

オーケー: は、私はかなり単純であるメインMessageServerクラスを追加しました問題の原因を突き止めることができました。 BeanがIoCコンテナでインスタンスが、問題は、私の2つの愚かな過ちのRedisMessageRepositoryImplで自動ワイヤーそれをしようとしたときに発生したすべての

まず、私が誤ってプライベート修飾子の代わりに、公共を使用しました

@Inject 
    private RedisMessageRepositoryImpl(RedisTemplate<String, Message> redisTemplate) { 
     this.redisTemplate = redisTemplate; 
    } 

このように、Bean自体は@Repositoryでマークされていてもインスタンス化できませんでした。

私はRedisTemplateのジェネリック宣言削除する必要がありました。このように

private final RedisTemplate redisTemplate; 

private final RedisTemplate<String, Message> redisTemplate; 

を、Beanは今何の問題もなくautowiredなどのIntelliJで見つかった、すべてです良い。

関連する問題