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>