如何在Spring的运行时更改属性值

问题描述

只需远离xml配置,就快要到2017年了。

@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;

解决方法

我需要在运行时在应用程序中更改属性。例如,我有一项服务,该服务发送带有重置密码的电子邮件。要求有效期为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>

我可以在运行时以某种方式更改此值吗?