La configuration java est normale de nos jours, donc je n'ai pas beaucoup de problèmes. Par exemple, supposons que vous écriviez spring-batch en xml et que vous souhaitiez définir la propriété sql sur la chaîne SQL envoyée au fichier.
FileCopyUtils [java --Comment charger une ressource et utiliser son contenu sous forme de chaîne dans Spring --Stack Overflow](https://stackoverflow.com/questions/14022839/how-do-i-load-a-resource-and-use -son-contenu-comme-une-chaîne-au-printemps)
<bean id="sql" class="java.lang.String">
<constructor-arg>
<bean class="org.springframework.util.FileCopyUtils"
factory-method="copyToByteArray">
<constructor-arg value="classpath:a.txt"
type="java.io.InputStream" />
</bean>
</constructor-arg>
</bean>
Ce qui précède est tout complété avec XML, mais cela semble être un peu long. Alors, pensez à faire votre propre haricot qui fait juste cela.
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.stream.Collectors;
import org.springframework.util.ResourceUtils;
public class ResourceToStringUtils {
public String to(String location) throws IOException {
ApplicationContext ctx = ...;
BufferedReader in
= new BufferedReader(new InputStreamReader(resource.getInputStream(), Charset.defaultCharset()));
return = in.lines().collect(Collectors.joining(System.lineSeparator()));
// 2017/0/02 Addendum J'avais l'habitude d'écrire comme ci-dessous, mais en fonction de l'environnement, FileNotFoundException se produira.
//Les détails seront écrits séparément. peut être.
//File file = ResourceUtils.getFile(location);
//return Files.lines(file.toPath(), Charset.defaultCharset()).collect(Collectors.joining(System.lineSeparator()));
}
}
Créez une classe qui reçoit l'emplacement du ressort, lit tout le contenu du fichier, le convertit en une chaîne et le renvoie.
<bean id="resourceToStringUtils"
class="kagamihoge.hogehoge.ResourceToStringUtils"></bean>
...
<property name="p" value="#{resourceToStringUtils.to('file:hoge.txt')}"></property>
...
<property name="p" value="#{resourceToStringUtils.to('classpath:foo.sql')}"></property>
Recommended Posts