【发布时间】:2015-01-21 16:06:04
【问题描述】:
由于种种原因,我最终使用了 spring boot 1.2.0 RC2。 因此,在 spring boot1.1.8 中运行良好的 spring data mongo 应用程序现在出现了问题。除了与 spring boot 1.2.0 RC2 的碰撞外,没有更改任何代码。这是由于 Spring Cloud 的快照版本移动到了这个 Spring Boot 版本。
仓库类如下
@Repository
public interface OAuth2AccessTokenRepository extends MongoRepository<OAuth2AuthenticationAccessToken, String> {
public OAuth2AuthenticationAccessToken findByTokenId(String tokenId);
public OAuth2AuthenticationAccessToken findByRefreshToken(String refreshToken);
public OAuth2AuthenticationAccessToken findByAuthenticationId(String authenticationId);
public List<OAuth2AuthenticationAccessToken> findByClientIdAndUserName(String clientId, String userName);
public List<OAuth2AuthenticationAccessToken> findByClientId(String clientId);
}
这在版本出现问题之前运行良好,现在我在日志中看到了这一点。
19:04:35.510 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Ignored because not a concrete top-level class: file [/Users/larrymitchell/rpilprojects/corerpilservicescomponents/channelMap/target/classes/com/cisco/services/rpil/mongo/repository/oauth2/OAuth2AccessTokenRepository.class]
我确实有另一个可以识别的 mongo 存储库,但它被定义为类实现
@Component
public class ChannelMapRepository { ... }
这个被识别(我将它定义为一个实现类作为我遇到的另一个问题的解决方法)。此类已被识别并且似乎可以正常工作。
19:04:35.513 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Identified candidate component class: file [/Users/larrymitchell/rpilprojects/corerpilservicescomponents/channelMap/target/classes/com/cisco/services/rpil/services/Microservice.class]
有人知道为什么吗?我查找了组件扫描不起作用的各种原因,但没有任何问题可以解决我的问题。
【问题讨论】:
-
按预期工作,消息告诉您原因。您的接口是一个接口,组件扫描不会检测到它,它永远不会(在早期版本中没有)。接口一由 Spring Data MongoDB 检测并添加行为。
-
如前所述,代码中唯一的区别是spring boot的版本发生了变化。该代码在更改之前运行良好。查看他的指南,您会发现将存储库定义为接口是公认的方法。实现类由spring数据创建:spring.io/guides/gs/accessing-data-mongodb
-
这就是我所说的...您使用的是 Spring Boot,所以还要确保您使用 Spring Boot 来管理您的依赖项,使用 Spring Boot 启动器来拉入您的依赖项(即
spring-boot-starter-data-mongodb在这种情况下),不要试图摆弄你自己的。请添加您的 pom 以查看其中缺少什么(或是否)。 -
我正在使用 spring cloud 1.0.0 Snapshot,它通过依赖管理引入 spring boot jars。我已经有 mongo 的 spring boot starter 了。截至上周四,所有这些都在 Spring Cloud 上运行,但它停止了。我注意到新的 Spring Cloud Starters 从 Spring Framework 4.0.7 迁移到 4.1.2,Spring Boot 从 1.1.8 迁移到 1.2.0 RC1。我的 pom 相当长,所以我会尝试在 git 中整理一个小示例并粘贴链接。
-
较新的 Spring Boot 具有较新的 Spring Data MongoDB 版本。所以可能是某些东西发生了变化(该版本中的一些属性名称也发生了变化!)。