为了账号安全,请及时绑定邮箱和手机立即绑定

扫描另一个包中的存储库

扫描另一个包中的存储库

UYOU 2022-10-12 10:11:30
我试图让我的 Spring Boot 应用程序(使用 Spring Data REST)来发现Repository在另一个包和项目中定义的类。我想知道我是否可以配置应用程序来检测Repository类而不必依赖@EnableJpaRepositories.作为背景,我有两个项目。一,我们称之为data项目、包含Entity和Repository类。另一个,我们称之为它expense-tracker,是一个Spring Boot应用程序,它Spring Data REST作为依赖项帮助为项目中的Repository类生成 REST 端点data。这是项目的结构所有的Repository类都扩展PagingAndSortingRepository接口。下面是一个例子。package com.example.data.repositories;import com.example.data.entities.Transaction;import org.springframework.data.repository.PagingAndSortingRepository;public interface TransactionRepository extends PagingAndSortingRepository<Transaction, Long> {}我试图设置scanBasePackageClassesfor @SpringBootApplication(见下文),但没有奏效。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: default2019-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类。我的期望是@SpringBootApplicationwithscanBasePackageClasses应该允许 Spring 检测Repository类。是不是这样,或者我必须使用另一个注释,类似于EntityScan,告诉 Spring Boot 在哪里扫描Repository类?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

我不认为 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 {

}

这样可以增加模块化,因为费用跟踪器项目不知道数据项目需要什么样的配置。它将控制权传递给数据项目,让它进行所需的配置。


希望这可以帮助。


查看完整回答
反对 回复 2022-10-12
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号