java - 在 Service 类的构造函数中使用 JPA 存储库访问
问题描述
我有一个带有服务(带注释@Service
)并具有多个 JPA 存储库接口的 spring boot 应用程序。
现在我想在服务启动期间从数据库中读取条目,因为 JPA 存储库和数据库连接在其他任何事情之前完成。
所以我决定将该代码放入服务的构造函数中。
问题是:
这是在应用程序启动时仅初始化一次服务的某些属性的正确方法(存储在数据库中的配置)吗?
我已经查看了
@PostConstruct
InitializingBean 接口(但是它们很难为它们编写测试?(也许我在这里忽略了一些东西?)这是更好的方法吗?
更新 I 配置服务仅包含单个 JPA 存储库(包含配置部分的表)的注入(通过构造函数)。在构造函数中,只会从数据库中读取几个值(此时为 4)并将其分配给服务的属性。(我已经简化了一点,并将其深入到这里最重要的部分):
@Service
public class ConfigService {
private final ConfigRepository configRepository;
private final Duration configValueOne;
public ConfigService(ConfigRepository configRepository) {
this.configValueOne=convertFromRepoToDuration("ATTRIBUTE");
}
public Duration configValueOne() {
return configValueOne;
}
}
更新二:
- 该配置将用于应用程序的多个区域,这就是我将其实现为服务的原因。
- 数据库中值的更改仅在重新启动应用程序后才会生效,这正是这种方式的意图。
解决方案
推荐阅读
- azure-active-directory - 对 EWS API 和 Graph API 使用相同的身份验证
- java - 替换字符串的第 n 个字符但忽略空格的最佳方法?
- python - 为什么不能从另一个类构造静态类字典?
- javascript - 闭包如何帮助函数了解前一个函数调用的私有变量
- django - 表单集提交后无法推进 Django 分页器
- c# - Unity:如何将json字符串反序列化为类?
- mysql - 哪个版本的 MySQL 与 Airflow 1.10 版本兼容?
- javascript - discord.js 随机图像显示不正确
- google-cloud-platform - Deployment Manager 无法更新实例模板 - NO_METHOD_TO_UPDATE_FIELD
- f# - 为什么在 IComparable 和比较方面这两个定义上推断的 F# 类型不同?