Корректно ли при создании Bean обращаться к базе данных?
Конфигурация оборудования хранится в базе данных. Корректно ли делать в конфигурации метод, который возвращает Bean, сконфигурированный из данных, полученных из базы данных? Или лучше не использовать Bean и создавать такие объекты в коде? Или есть другой вариант?
Пример:
@Configuration
public class ProtocolConfig {
private final List<DecisionPointModel> decisionPointModels;
String deviceAddress;
public ProtocolConfig(DecisionPointRepository decisionPointRepository) {
decisionPointModels = decisionPointRepository.findAll();
Optional<DecisionPointModel> dpm = decisionPointModels.stream().findFirst();
dpm.ifPresent(decisionPointModel -> deviceAddress = decisionPointModel.getControllerParameterModel().getDevice().getDeviceAddress());
}
@Bean
public S7ProtocolMultiWrite multiResponseBean() {
if (decisionPointModels.size() > 0) {
int responseDb = S7Protocol.parseConnectionString(decisionPointModels.get(0).getControllerParameterModel().getCommandConnectionString()).getDb();
Long countResponse = decisionPointModels.stream().count() * PlcResponseDataBlock.byteLength;
return new S7ProtocolMultiWrite(deviceAddress, responseDb, countResponse.intValue());
} else {
throw new BeanCreationException("Error Creating multiResponseBean");
}
}
@Bean(name = "arriveReadBean")
public S7ProtocolMultiRead multiArriveBean() {
if (decisionPointModels.size() > 0) {
int arriveDb = S7Protocol.parseConnectionString(decisionPointModels.get(0).getControllerParameterModel().getArriveConnectionString()).getDb();
Long countArrive = decisionPointModels.stream().count() * PlcRequestDataBlock.byteLength;
return new S7ProtocolMultiRead(deviceAddress, arriveDb, countArrive.intValue());
} else {
throw new BeanCreationException("Error Creating multiArriveBean");
}
}
}