![](/img/trans.png)
[英]How just scan a concrete JPA entity but not all entities bellow the same package with spring-boot?
[英]Spring-Boot/JPA: Problem with packages and Entities
我有一个带有组件和预定功能的 Spring-Boot 应用程序。
package My.A;
@SpringBootApplication
@EnableScheduling
public class MyApp
{
public static void main (String args []) throws Exception
{
SpringApplication.run (MyApp.class, args);
}
}
组件:
package My.A;
@Component
public class MyComp
{
@Scheduled (fixedRate = 3000)
public void foo ()
{
System.out.println ("foo");
}
}
一切都很好,我每 3 秒打印一次“foo”。
现在我想添加 JPA。 这不是我第一次使用 JPA。
但这是我第一次将实体放在另一个包(My.B)中。
package My.B;
@Entity
@SequenceGenerator (name = "seq", initialValue = 1)
public class MyRecord
{
....
我在 App 中添加了一个存储库来访问数据库。
package My.A;
public interface MyRecordRepo extends CrudRepository <MyRecord, Long>
{
}
并且我添加了注释让 MyApp 找到 My.B 的 MyRecord。
package My.A;
@SpringBootApplication
@EnableScheduling
@EnableJpaRepositories ("My.B.*") // NEW
@ComponentScan (basePackages = { "My.B.*" }) // NEW
public class WebApplication
{
...
没有那个 MyApp 会在开始时抛出一个异常,即找不到实体。 使用注释,它可以编译并正常启动。
但是现在我的预定函数 foo 没有被解雇。 我尝试将 My.A.* 添加到 ComponentScan 中,但没有成功。
@ComponentScan (basePackages = { "My.B.*", "My.A.*" })
Think MyApp 现在找不到自己的组件。
我怎样才能让我的 scheudled 函数回来,并且在我的主包之外还有 JPA 类?
将@EntityScan("My.B")
添加到您的配置中。
当您使用@ComponentScan
时,它会禁用 Spring Boot 自动配置扫描,您必须手动指定所有使用的包。
此外,您不需要@EnableJpaRepositories
- 如果 Spring Boot 在类路径上找到 Spring Data JPA,它会自动执行此操作。
不需要 .* 组件扫描的工作方式是,如果您只定义
@ComponentScan (basePackages = { "My" })
它将深入到它的所有子文件夹,其中包括 A 和 B 包。
但是如果你想限制你的扫描到特定的包,那么你可以写
@ComponentScan (basePackages = { "My.B", "My.A" })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.