我需要在运行时更改应用程序中的属性。 例如,我有一个服务,它发送一个带有resset密码的电子邮件。请求有效期为12小时。但我想在运行时将此时间更改为24或更多。我需要为管理员提供此操作的机会。
我的属性文件有
hours.expired=12
我的服务
private int hoursExpiredPassword;
public void setHoursExpiredPassword(int hoursExpiredPassword) {
this.hoursExpiredPassword = hoursExpiredPassword;
}
@Override
public ERequests checkRequest(String number, Date date) {
PasswordResetRequest findedObject = passwordResetRequestDao.getObjectByElement(PasswordResetRequest.class, "requestId", number);
if (findedObject == null){
return ERequests.BAD_REQUEST;
}else{
long result = getDateDiff(findedObject.getRequestDate(),date,TimeUnit.HOURS);
if(result >= hoursExpiredPassword){
return ERequests.EXPIRED_REQUEST;
}
}
return ERequests.CORRECT_REQUEST;
}
我的spring xml配置
<bean id="passwordResetRequestService" class="pl.lublin.example.services.servicesDAO.PasswordResetRequestService">
<property name="passwordResetRequestDao" ref="passwordResetRequestDao"></property>
<property name="hoursExpiredPassword" value="${hours.expired}"></property>
</bean>
我可以在运行时以某种方式更改此值吗?
答案 0 :(得分:11)
差不多从2017年的xml配置开始。
@Service
public class PasswordResetRequestService {
@Value("${hours.expired:12}")
private int hoursExpiredPassword;
@Autowired
private PasswordResetRequestDao passwordResetRequestDao;
public void setHoursExpiredPassword(int hoursExpiredPassword) {
this.hoursExpiredPassword = hoursExpiredPassword;
}
@Override
public ERequests checkRequest(String number, Date date) {
PasswordResetRequest findedObject = passwordResetRequestDao.getObjectByElement(PasswordResetRequest.class, "requestId", number);
if (findedObject == null){
return ERequests.BAD_REQUEST;
}else{
long result = getDateDiff(findedObject.getRequestDate(),date,TimeUnit.HOURS);
if(result >= hoursExpiredPassword){
return ERequests.EXPIRED_REQUEST;
}
}
return ERequests.CORRECT_REQUEST;
}
}
使用@Value,您将从属性文件中提取hours.expired值,如果没有值,则默认值为12.您还可以在运行时调用setHoursExpired并设置新值并将该功能公开给您的管理员。
这对于一次性操作很方便。如果您希望管理员永久更改密码到期时间,我会在mysql或您正在使用的数据库中持续使用hours.expired值。
编辑:回答完全有效的@matt评论。如果是这种情况并且转向Java confing不是一种选择。对于自定义行为,您只需在服务中自动装配XML定义的bean并执行您想要的任何逻辑。
@Autowired
private pl.lublin.zeto.zetoRA.services.servicesDAO.PasswordResetRequestService passwordResetRequestService;
答案 1 :(得分:0)
我必须使用XML配置。我们的项目以此为基础。 最后,我需要从db获取所有配置值。最简单的解决方案是使用服务进行配置,并始终从db调用配置状态。
configurationService.findAllConfigurations().get("hours.expired")
这个返回值存储在db中。
但我认为有更好的解决方案。
答案 2 :(得分:0)
使用@Value(“$ {hours.expired}”)更改属性文件的值不是一个好习惯。如果从属性文件更改任何值,则需要重新启动服务器或重新运行应用程序。所以最好在数据库中存储hours.expired值。您可以随时轻松更新。