vertical springutilities springlayout managers manager layouts ejemplo java spring

java - springutilities - ¿Cómo cargo un recurso y uso su contenido como una cadena en Spring?



springlayout ejemplo (5)

¿Cómo puedo cargar un contenido de recursos de Spring y usarlo para establecer una propiedad de bean o pasarla como un constructor de argumentos?

El recurso contiene texto libre.


En una línea intente esto para leer test.xml:

String msg = StreamUtils.copyToString( new ClassPathResource("test.xml").getInputStream(), Charset.defaultCharset() );


Esta es una forma de hacerlo sin utilizar ninguna biblioteca externa. Por defecto provisto por Spring. El archivo environment.properties contiene pares de valores clave ... referencia cada valor con $ {key}

aquí en mi ejemplo, estoy manteniendo los accesorios de la base de datos

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list value-type="org.springframework.core.io.Resource"> <value>classpath:environment.properties</value> </list> </property> </bean> <bean id="mySQLdataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${JDBC.driver}" /> <property name="url" value="${JDBC.URL}" /> <property name="username" value="${JDBC.username}" /> <property name="password" value="${JDBC.password}" /> </bean>


Solo leelo :

try { Resource resource = new ClassPathResource(fileLocationInClasspath); BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()),1024); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = br.readLine()) != null) { stringBuilder.append(line).append(''/n''); } br.close(); return stringBuilder.toString(); } catch (Exception e) { LOGGER.error(e); }


respuesta de fue muy útil y, siguiendo la observación de agregué un fragmento de configuración similar al código de Daoway.

<bean id="contents" class="org.springframework.core.io.ClassPathResource"> <constructor-arg value="path/to/resource.txt"/> </bean>

De tu componente

@Autowired private Resource contents; @PostConstruct public void load(){ try { final InputStream inputStream = contents.getInputStream(); //use the stream BufferedReader br = new BufferedReader(new InputStreamReader(inputStream ,1024); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = br.readLine()) != null) { stringBuilder.append(line).append(''/n''); } br.close(); }catch (IOException e) { LOGGER.error(message); } }


<bean id="contents" class="org.apache.commons.io.IOUtils" factory-method="toString"> <constructor-arg value="classpath:path/to/resource.txt" type="java.io.InputStream" /> </bean>

Esta solución requiere Apache Commons IO.

Otra solución, sugerida por @Parvez, sin la dependencia de Apache Commons IO es

<bean id="contents" class="java.lang.String"> <constructor-arg> <bean class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray"> <constructor-arg value="classpath:path/to/resource.txt" type="java.io.InputStream" /> </bean> </constructor-arg> </bean>