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);
}
}
メインクラスコードも共有できますか? – MohamedSanaulla
@reply 私は元の投稿にメインクラスを追加しました:) – Wjoz