fko*_*fko 2 java mongodb redis spring-boot
我想以存储库方式使用Redis和Mongo(我不想使用spring缓存注释,而是使用存储库方法)。
我用以下注释对主类进行注释。
@EnableMongoRepositories(basePackageClass = PersistencyRepository.class)
@EnableRedisRepositories(basePackageClass = CacheRepository.class)
@SpringBootApplication
回购协议
public interface PersistencyRepository extends CrudRepository<Store, String> {}
public interface CacheRepository extends MongoRepository<Store, String> {}
现在,我收到以下错误。
The bean "cacheRepository" defined in com.repository.CacheRepository defined in @EnableMongoRepositories declared on StoreApplication, could not be registered. A bean with that name has already been defined in com.repository.CacheRepository defined in @EnableRedisRepositories declared on StoreApplication and overriding is disabled. 
如何使用不同数据库(mongo、redis)的存储库?
小智 6
您在 CacheRepository 上扩展了错误的存储库接口 (MongoRepository),请尝试扩展 CrudRepository。
另外,您的 mongo 和 redis 实体应该分离到不同的包中,通常我只是分别使用 com.my.company.entity.mongo 和 com.my.company.entity.redis 。
之后,您需要更新这些配置注释。更好的包设计,不是将所有注释放在 Main 上,而是将它们放在单独的包中,然后将这些注释放在那里。这还有一个额外的好处,可以清楚地划分每个配置的实际用途
例如:
package com.your.company.configuration;
import com.your.company.configuration.properties.ApplicationProperties;
import com.your.company.entity.mongo.BaseDocument;
import com.your.company.entity.postgres.BaseEntity;
import com.your.company.entity.redis.BaseHash;
import com.your.company.repository.mongo.BaseMongoRepository;
import com.your.company.repository.postgres.BaseJpaRepository;
import com.your.company.repository.redis.BaseRedisRepository;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableConfigurationProperties(ApplicationProperties.class)
@EnableJpaRepositories(basePackageClasses = {BaseEntity.class, BaseJpaRepository.class})
@EnableMongoRepositories(basePackageClasses = {BaseDocument.class,
        BaseMongoRepository.class}, repositoryFactoryBeanClass = EnhancedMongoRepositoryFactoryBean.class)
@EnableRedisRepositories(basePackageClasses = {BaseHash.class, BaseRedisRepository.class})
public class BasicConfiguration {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
上面只是一个示例,通常我会将它们进一步拆分为一个类,每个类都位于同一个包中,其名称描述了它们实际配置的内容,例如:MongoConfiguration.java、JpaConfiguration.java 等。如果您决定使用,请注意使用这种设计,您需要在每个单独的类中使用 @Configuration 注释
| 归档时间: | 
 | 
| 查看次数: | 1774 次 | 
| 最近记录: |