我有一个maven多模块项目。它由两个spring Boot 3应用程序和一个公共库组成,共享dtos。两个spring Boot 应用程序都工作得很好。我试图做的是使用一个spring Boot 应用程序的存储库和实体到另一个,也许是不可能的。所以我有这个app1,它应该扫描app2的实体和存储库:
@SpringBootApplication
@EntityScan(basePackages={"com.acme.app1.entity","com.acme.app2.entity"})
@EnableJpaRepositories(basePackages={"com.acme.app1.repository","com.acme.app2.repository"})
public class App1 {...}
字符串
app2实体和仓库是这样的:
package com.acme.app2.entity;
@Entity
@DynamicUpdate
@Table(indexes = {...})
public class Home {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JdbcTypeCode(SqlTypes.VARCHAR)
@Column(name = "id", columnDefinition = "VARCHAR(36)", updatable = false, nullable = false)
private UUID id;
....
型
和repository:
package com.acme.app2.repository;
@Repository
public interface HomeRepository extends JpaRepository<Home, UUID> {...}
型
所以我认为App1可以看到App2的实体和存储库,但是当我尝试在这样的服务中使用它时:
package com.acme.app1.service;
import com.acme.app2.repository.HomeRepository;
@Service
public class DefaultApp1Service extends Throwable implements App1Service {
@Autowired
private HomeRepository homeRepository;
型
首先,IntelliJ告诉我homeRepository无法连接,找不到HomeRepository类型的bean,当我运行应用程序时,
不是托管类型:类com.acme.app2.entity.Stock
2条答案
按热度按时间nhjlsmyf1#
我创建了一个示例来测试从另一个maven模块https://github.com/Lefeverw/stackoverflow-importing-entity导入存储库/实体:
IDE确实会给予一条警告消息,指出
homeRepository
无法自动连接。然而,代码确实编译并成功运行。在我看来,这可能是IDE的限制(可能它没有正确处理@EnableJpaRepositories
注解)。关于错误消息
Not a managed type: class com.acme.app2.entity.Stock
。我怀疑这里还有其他错误,但如果没有更多信息,就不可能弄清楚到底是什么。你能分享更多的代码或上传一个最小的,可重复的示例到GitHub吗?在任何情况下,您都可以自由使用示例并与当前代码进行比较。祝您好运!
djp7away2#
我发现了问题所在。在app 1中,我将数据库连接配置为两个数据库,一个用于读取,一个用于写入,由于某种原因,这会阻止实体扫描。我回滚到一个数据库连接,用于读取和写入,现在它工作正常!