Anotación @Valor no funciona correctamente en la primavera de arranque?

Dmytro Chasovskyi:

CONTEXTO:

Cómo proceso con informes @Scheduledde anotación y cuando invocación Componentde Servicepropiedad no siendo inicializado con la @Valueanotación aún existe físicamente .propertiesy se imprimen en @PostConstruct.

DESCRIPCIÓN:

ReportProcessorinterfaz y InventoryReportProcessoraplicación:

@FunctionalInterface
interface ReportProcessor {
    public void process(OutputStream outputStream);
}

@Component
public class InventoryReportProcessor implement ReportProcessor {

    @Value("${reportGenerator.path}")
    private String destinationFileToSave;

    /*
    @PostConstruct
    public void init() {
        System.out.println(destinationFileToSave);
    }
    */

    @Override
    public Map<String, Long> process(ByteArrayOutputStream outputStream) throws IOException {
        System.out.println(destinationFileToSave);

        // Some data processing in here
        return null;
    }
}

Lo uso desde

@Service
public class ReportService {
    @Value("${mws.appVersion}")
    private String appVersion;

    /* Other initialization and public API methods*/

    @Scheduled(cron = "*/10 * * * * *")
    public void processReport() {
        InventoryReportProcessor reportProcessor = new InventoryReportProcessor();
        Map<String, Long> skus = reportProcessor.process(new ByteArrayOutputStream());
    }
}

Mi confusión proviene del hecho de que @Valueen Servicelas obras bien, pero en el @Componentque vuelve nulla menos de llamadas @PostConstruct. Además, si la llamada @PostConstructel valor es aún permanece nullen el resto del código de la clase.

He encontrado similares Q & A y lo hice investigación en Srping docs pero hasta ahora hay una sola idea de por qué funciona de esta manera y lo que puede ser una solución?

Dhaval Simaria:

Es necesario que Autowire el componente para que su aplicación primavera conscientes del componente.

@Service
public class ReportService {
    @Value("${mws.appVersion}")
    private String appVersion;

    /* Other initialization and public API methods*/
    @Autowired
    private ReportProcessor reportProcessor;

    @Scheduled(cron = "*/10 * * * * *")
    public void processReport() {
        //InventoryReportProcessor reportProcessor = new InventoryReportProcessor();
        Map<String, Long> skus = reportProcessor.process(new ByteArrayOutputStream());
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=232972&siteId=1
Recomendado
Clasificación