Gre*_*g J 31 java file-io spring classpath
这是我想要做的,我想知道是否有任何Spring类有助于实现.我没有必要使用spring来解决这个问题,我只是用其他一切来实现它.
在我的DAO层中,我想要外化我的sql文件,即每个文件1个sql.我想读取并缓存sql语句,甚至可能作为一个spring bean单例.但在我最初的挣扎中,我只是在类路径中加载一个sql文件时遇到了问题...
春天有什么东西可以帮助吗?我已经阅读了文档,但没有任何内容可以跳出来.
这是我正在追求的东西......但我无法识别文件或类似路径...不确定是否需要在applicationContext中定义某些内容?
这里有几个似乎不起作用的尝试......无论是春天还是只是java'ish.
reader = new BufferedReader(new InputStreamReader(new ClassPathResource("com.company.app.dao.sql.SqlQueryFile.sql").getInputStream())
reader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("com.company.app.dao.sql.SqlQueryFile.sql")));
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
Jon*_*eet 39
改变.到/作为路径分隔符并使用getResourceAsStream:
reader = new BufferedReader(new InputStreamReader(
getClass().getClassLoader().getResourceAsStream(
"com/company/app/dao/sql/SqlQueryFile.sql")));
Run Code Online (Sandbox Code Playgroud)
要么
reader = new BufferedReader(new InputStreamReader(
getClass().getResourceAsStream(
"/com/company/app/dao/sql/SqlQueryFile.sql")));
Run Code Online (Sandbox Code Playgroud)
注意使用Class.getResourceAsStream()vs 时的前导斜杠ClassLoader.getResourceAsStream.
getSystemResourceAsStream使用系统类加载器,这不是你想要的.
我怀疑使用斜线而不是点也会起作用ClassPathResource.
小智 34
尝试让Spring注入它,假设你使用Spring作为依赖注入框架.
在你的班上,做这样的事情:
public void setSqlResource(Resource sqlResource) {
this.sqlResource = sqlResource;
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序上下文文件中,在bean定义中,只需设置一个属性:
<bean id="someBean" class="...">
<property name="sqlResource" value="classpath:com/somecompany/sql/sql.txt" />
</bean>
Run Code Online (Sandbox Code Playgroud)
Spring应该足够聪明,可以从类路径加载文件并将其作为资源提供给bean.
您还可以查看PropertyPlaceholderConfigurer,并将所有SQL存储在属性文件中,并在需要时单独注入每个SQL.有很多选择.