gpt4 book ai didi

java - 扫描另一个包中的存储库

转载 作者:行者123 更新时间:2023-11-30 01:51:55 24 4
gpt4 key购买 nike

我试图让我的 Spring Boot 应用程序(使用 Spring Data REST)发现另一个包和项目中定义的 Repository 类。我想知道是否可以配置应用程序来检测 Repository 类,而不必依赖 @EnableJpaRepositories

作为背景,我有两个项目。一,我们称之为data项目,包含EntityRepository类。另一个,我们称之为 expense-tracker,是一个 Spring Boot 应用程序,以 Spring Data REST 作为依赖项,帮助生成 REST 端点data 项目中的 Repository 类。

这是项目的结构 project structure

所有Repository类都扩展了PagingAndSortingRepository接口(interface)。下面是一个示例。

package com.example.data.repositories;

import com.example.data.entities.Transaction;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface TransactionRepository extends PagingAndSortingRepository<Transaction, Long> {

}

我尝试为@SpringBootApplication设置scanBasePackageClasses(见下文),但它不起作用。

package com.example.expensetracker;

import com.example.data.NoOpClass;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@SpringBootApplication(scanBasePackageClasses = NoOpClass.class)
@EntityScan(basePackageClasses = NoOpClass.class)
public class ExpenseTrackerApplication {

public static void main(String[] args) {
SpringApplication.run(ExpenseTrackerApplication.class, args);
}
}

日志消息显示 Spring 未检测到任何 Repository 类。

2019-04-17 09:33:02.465  INFO 8279 --- [           main] c.e.e.ExpenseTrackerApplication          : No active profile set, falling back to default profiles: default
2019-04-17 09:33:09.852 INFO 8279 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-04-17 09:33:10.141 INFO 8279 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 238ms. Found 0 repository interfaces.

但是,当我切换到使用@EnableJpaRepositories(见下文)时,Spring 检测到了Repository 类。

package com.example.expensetracker;

import com.example.data.NoOpClass;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EntityScan(basePackageClasses = NoOpClass.class)
@EnableJpaRepositories(basePackageClasses = NoOpClass.class)
public class ExpenseTrackerApplication {

public static void main(String[] args) {
SpringApplication.run(ExpenseTrackerApplication.class, args);
}
}

日志消息(针对上述情况)表明 Spring 成功检测到 Repository 类。

2019-04-17 09:34:29.921  INFO 8370 --- [           main] c.e.e.ExpenseTrackerApplication          : No active profile set, falling back to default profiles: default
2019-04-17 09:34:35.300 INFO 8370 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-04-17 09:34:35.833 INFO 8370 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 483ms. Found 3 repository interfaces.

我的期望是带有 scanBasePackageClasses@SpringBootApplication 应该允许 Spring 检测 Repository 类。是不是这样,或者我必须使用另一个注释(类似于 EntityScan )来告诉 Spring Boot 在哪里扫描 Repository 类?

最佳答案

我认为 Spring 不会看到您的存储库类,除非您使用 EnableJpaRepositories,但您不必在 SpringBootApplicaiton 类中使用此注释。

您可以将 @ComponentScan(basePackages = {"com.example.data"}) 添加到您的 SpringBootApplication 类,然后将以下类添加到您的数据项目。

package com.example.data;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@EnableJpaRepositories
@EnableAutoConfiguration
@Configuration
public class SpringConfiguration {
}

通过这种方式,您可以提高模块化程度,因为费用跟踪器项目不知道数据项目需要哪种配置。它将控制权传递给数据项目,让它进行所需的配置。

希望这有帮助。

关于java - 扫描另一个包中的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com