valor tmar tasa retorno recuperacion presente periodo neto interna ingenieria ejercicios ejemplos ejemplo economica con como calcular spring properties

spring - tasa - valor presente neto con tmar



Anotación Spring @Value en la clase @Controller que no evalúa el valor dentro del archivo de propiedades (5)

Necesita usar PropertySourcePlaceHolder si está utilizando la anotación @Value porque puede extraer el valor de un archivo de propiedades. Si está utilizando la base de configuración de Java, necesita crear un bean como este

@Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); }

O si está utilizando xml basado, declare el bean en consecuencia.

Soy nuevo en Spring y trato de inyectar una cadena con un valor usando la @Value("${loginpage.message}") dentro de un controlador anotado con la anotación @Controller y el valor de mi cadena se está evaluando como el cadena "${loginpage.message}" y no lo que está dentro de mi archivo de propiedades.

Debajo está mi controlador con la cadena ''mensaje'' que quiero inyectar.

@Controller public class LoginController extends BaseController { @Value("${loginpage.message}") private String message; @RequestMapping("/") public String goToLoginPage(Model model) { model.addAttribute("message", message); return "/login"; } }

Mi contexto de aplicación se ve así:

<context:property-placeholder location="classpath:properties/application.properties" /> <context:annotation-config /> <context:component-scan base-package="com.me.application" />

Mi archivo de propiedades tiene la línea:

loginpage.message=this is a test message

Spring debe estar recuperando el valor en algún punto porque cada vez que cambio @Value("${loginpage.message}") a un valor que no está en el archivo de propiedades como @Value("${notInPropertiesFile}") , recibo una excepción .


Parece que la pregunta ya se ha planteado. Spring 3.0.5 no evalúa la anotación @Value de las propiedades.

La diferencia entre los contextos de la aplicación web y los contextos de aplicación servlet es una de las principales fuentes de confusión en Spring, consulte Diferencia entre applicationContext.xml y spring-servlet.xml en Spring Framework

Desde @Value javadoc:

Tenga en cuenta que el procesamiento real de la anotación @Value es realizado por un BeanPostProcessor

De la documentación de Spring:

Las interfaces de BeanPostProcessor tienen un alcance por contenedor. Esto solo es relevante si usa jerarquías de contenedor. Si define BeanPostProcessor en un contenedor, solo hará su trabajo en los beans en ese contenedor. Los beans que están definidos en un contenedor no son procesados ​​posteriormente por un BeanPostProcessor en otro contenedor, incluso si ambos contenedores son parte de la misma jerarquía.


Puede @Autowire Environment y luego environment.getProperty("name") . Ver https://.com/a/15562319/632293


Sí, tengo el mismo problema con Spring 3. Parece que no funciona dentro de Controladores. Para solucionar el problema, creé otro bean con @Service y lo inyecté en el controlador. Funcionó para mí. Espero que esto sea útil para alguien, ya que pasé todo el día para resolverlo.


Tuve un problema similar en mi proyecto de primavera, pero específicamente en la primavera BATCH uno. Construí inicialmente mi configuración de la siguiente manera

@Configuration public class BatchConfig { @Bean public Job job(@Autowired Step stepMulti, @Autowired Step stepMultiDiff, @Autowired Step stepMultiPolling ){ Job job = jobBuilders.get("job") .start(init0()) .on("POLLING").to(stepMultiPolling) .from(init0()).on("*").to(stepMulti).next(stepMultiDiff).end() .build(); return job; } @Bean public Step init0(){ return stepBuilders.get("init0") .tasklet(new MyDecider()) .build(); } ... }

con MyDecider en breve como a continuación

public class MyDecider implements StepExecutionListener , Tasklet{ @Autowired ThreadPoolTaskScheduler taskScheduler; @Value("${read.chunk.size}") private Integer pagesize; @Override public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { return RepeatStatus.FINISHED; } @Override public ExitStatus afterStep(StepExecution exe) { String type = exe.getJobParameters().getString("mode"); log.info("SPRING BATCH props:"); log.info(" READ chunk size: {}", pagesize); if (StringUtils.equals(type, "send")) { log.info("MODE batch SENDING..."); if (taskScheduler !=null) taskScheduler.shutdown(); else log.info(" Not able to stop scheduler (is null)"); return new ExitStatus("SEND"); } else { log.info("MODE batch POLLING..."); return new ExitStatus("POLLING"); } }

Pero de esta forma, ni taskScheduler se conectó ni se insertó el tamaño de página; ambos nulos. Gracias a la respuesta de Boris, después de intentarlo, cambié BatchConfig como a continuación, funcionando perfectamente

... @Bean public Step init0(){ return stepBuilders.get("init0") .tasklet(decider()) .build(); } @Bean public Tasklet decider() { return new MyDecider(); } ...

Motivo: tener la construcción de MyDecider más cerca de una anotación de Bean en BatchConfig (la de decider () ), hacer que Spring entienda que MyDecider debe ser inyectado correctamente, con valores encontrados en los valores de application.property y cableado con TaskScheduler usado (porque lo intenté) también para tener la activación de SpringScheduler, pero quería quitarla si la opción de inicio del jar era ''enviar'').

NOTA: con el modo de opción = "enviar", el trabajo por lotes de primavera avanza hacia stepMulti y no stepMultiPolling, porque el estado de salida de MyDecider fue SEND y no POLLING; pero eso es solo una explicación de este tema, así que omito más detalles.

Espero que este caso de lote de primavera puede ser útil para alguien!