当前位置: 首页 > 知识库问答 >
问题:

Spring Boot:由于“奇怪”的设置,配置扫描缺少类

单于俊智
2023-03-14

我们以一种混乱的方式设置ETL项目,只是为了完成一项工作:

这个项目依赖于其他几个Spring项目,所以我们将这些项目作为依赖项包括在内。这些项目包含它们自己的@配置类,可能会导致冲突。我现在处于这样一种状态,我在我的ETL项目中设置了一个动态存储库,但它没有被自动构建,抛出一个错误:

com中的构造函数。迈特尔。服务impl。ErrorServiceImpl需要“com”类型的bean。迈特尔。存储库。找不到ProjectErrorRepository。

当我启动应用程序时,我在控制台的前面看到它将其视为Redishtml" target="_blank">存储库:

RepositoryConfigurationExtensionSupport:Spring Data Redis-无法安全地识别存储库候选接口com的存储分配。迈特尔。存储库。ProjectErrorRepository。如果您希望这个存储库是ReISIS存储库,请考虑用这些注释中的一个注释Org。springframework。数据雷迪斯。果心ReDISHASH(首选),或者考虑将下列类型之一扩展到您的存储库:org。springframework。数据键值。存储库。KeyValueRepository。

我的基本项目中没有Redis配置,但它肯定存在于我的依赖项中。

我尝试了几种不同的方法,但都不起作用。例如,使用排除过滤器:

@SpringBootApplication(exclude = {DifferentProjectConfiguration.class})
@ComponentScan(includeFilters =
               @ComponentScan.Filter(type= FilterType.REGEX,
                                     pattern = "com\\.etl\\..*"),
               excludeFilters =
               @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,
                                     value = {OtherProjectRedisConfiguration.class}))
public class ProjectsMigrationApplication {
...

如果我注释掉存储库,那么应用程序可以正常加载,包括控制器和服务bean。这个问题似乎只针对我希望成为MySql JPA repo的存储库。以下是我的存储库的定义(我尝试过使用@Repository注释和不使用@Repository注释):

package com.etl.repository;

import com.etl.domain.ProjectError;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

public interface ProjectErrorRepository extends PagingAndSortingRepository<ProjectError, Long> {

}

@Entity
@Table(name="project_error")
@Data
public class ProjectError {
    @Id
    @Column(name = "project_error_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column
    private String errMsg;

    @Column(name = "user_email")
    private String userEmail;
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "migrationEntityManagerFactory", basePackageClasses = {
        ProjectError.class}, repositoryBaseClass = ProjectErrorRepository.class)
public class ProjectMigrationJpaConfig {

    @Bean(name = "migrationEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean migrationEntityManagerFactory(EntityManagerFactoryBuilder builder,
            DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages(ProjectError.class)
                .build();
    }

}

在一个错综复杂的项目中,诊断这种错误的最佳方法是什么,以了解Spring在幕后做什么?

共有1个答案

林玮
2023-03-14

听起来你把Redis作为另一个项目的过渡依赖项。你可能正在努力解决的是自动配置。

尝试从项目中排除Redis自动配置,看看它有什么作用。

    @SpringBootApplication(exclude = { RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class })
 类似资料:
  • 我正在尝试设置scaffold,以便为我的数据库测试获得一个可视化的rep。我可以在网页上看到控制器选项,但单击它后,我得到以下错误。 非常棒。lang.MissingMethodException语言 没有方法签名:静态grails。工艺品DomainClass。count()适用于参数类型:()值:[]可能的解决方案:print(java.io.PrintWriter)、print(java.

  • 我找不到关于beans xml配置的文档,所以我在这里问:在 在概念上与Java中的包相同吗? 例如,在我的src/main/java(Eclipse中的项目资源管理器视图,平面包演示)中,假设我有4个包com.amazon、com.amazon.entities、com.amazon.services、com.amazon.repositories.在Navigator视图中,我只有“amazo

  • 我们正在使用SpringCloud2.2。6.RELEASE使用vault存储我们的微服务,我们的vault团队对请求数量表示不满,他们提供了Splunk日志访问,我看到许多请求如下: 我确实看到了对秘密/数据/应用程序等的正常请求,但是为什么会有对秘密/数据/应用程序的请求呢? 关于如何或在哪里制作这个有什么想法吗?

  • 我在运行节点应用程序时遇到配置错误。错误是: 我的代码是: 我在这里尝试了解决方案: AWSCognito配置错误中缺少区域 这没有帮助。

  • 我觉得我在做一些非常愚蠢的事情,但我是Java新手,所以请耐心等待。我正在使用FileReader和扫描器来读取。txt文件的行。抓取每一行后,我提取一些信息,然后移动一行。这就是我的简化方法的样子: 我的问题是,如果将留在原处,我总是会跳过。txt文件的第一行,但是如果将它移到的末尾,当扫描仪到达。txt文件的末尾时,我会得到一个“no sock line exists”异常。 如有任何帮助和指