【发布时间】:2019-04-17 13:38:29
【问题描述】:
我正在尝试让我的 Spring Boot 应用程序(使用 Spring Data REST)发现在另一个包和项目中定义的 Repository 类。我想知道是否可以将应用程序配置为检测Repository 类,而不必依赖@EnableJpaRepositories。
作为背景,我有两个项目。一,我们称之为data 项目,包含Entity 和Repository 类。另一个,我们称之为expense-tracker,是一个Spring Boot 应用程序,以Spring Data REST 作为依赖项,以帮助为data 项目中的Repository 类生成REST 端点。
所有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> {
}
我尝试将scanBasePackageClasses 设置为@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: 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.
我的期望是 @SpringBootApplication 和 scanBasePackageClasses 应该允许 Spring 检测到 Repository 类。是不是这样,还是我必须使用另一个注解,类似于EntityScan,来告诉 Spring Boot 在哪里扫描Repository 类?
【问题讨论】:
-
@EnableJpaRepositoryies(classes={class1,class2}) ??或实体扫描。
-
@Antoniossss 我不明白你的问题。
标签: java spring-boot spring-data-rest