spring无法找到批量初始化db脚本

时间:2016-05-18 14:56:59

标签: tomcat spring-batch

我已经在tomcat中通过war文件部署了一个spring批处理。 我在服务器启动时使用ContextListener运行批处理。

批处理启动正常,但在数据库初始化期间,db脚本未运行。 该脚本位于WEB-INF / lib文件夹中的jar文件中。 这是config xml的代码部分 -

<jdbc:initialize-database data-source="dataSource">
 <jdbc:script location="jar:file:org/springframework/batch/core/schema-drop-mysql.sql" />
<jdbc:script location="org/springframework/batch/core/schema-mysql.sql" />
  </jdbc:initialize-database>

它给了我以下异常 -

  

java.io.FileNotFoundException:无法打开ServletContext资源   [/org/springframework/batch/core/schema-drop-mysql.sql]           在org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)           在org.springframework.core.io.support.EncodedResource.getReader(EncodedResource.java:132)           在org.springframework.jdbc.datasource.init.ScriptUtils.readScript(ScriptUtils.java:278)           在org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:438)           ......还有32个

4 个答案:

答案 0 :(得分:1)

我想这个:

<jdbc:script location="jar:file:org/springframework/batch/core/schema-drop-mysql.sql" />

应该是这样的:

<jdbc:script location="classpath:/org/springframework/batch/core/schema-drop-mysql.sql" />

答案 1 :(得分:0)

试试这一行。在我的情况下,这些工作正常:

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="org/springframework/batch/core/schema-drop-mysql.sql"/>
    <jdbc:script location="org/springframework/batch/core/schema-mysql.sql"/>
</jdbc:initialize-database>

答案 2 :(得分:0)

这对我有用

<jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="classpath:org/springframework/batch/core/schema-drop-oracle10g.sql" />
        <jdbc:script location="classpath:org/springframework/batch/core/schema-oracle10g.sql" />
    </jdbc:initialize-database>

我正在使用maven作为构建工具并在tomcat上进行部署。

答案 3 :(得分:0)

请注意,您将以两种不同的方式指定两个脚本的位置:一种以df2 = df2.set_index('key') df1 = df1.set_index('key').reindex(df2.index) print (df1) sequence field1 field2 key 2018/01 1 389.0 U 2018/02 2 24.0 A 2018/03 NaN NaN NaN 2017/02 4 NaN R 2017/01 3 80.5 U df3 = df1 != df2 print (df3) sequence field1 field2 key 2018/01 False False False 2018/02 False False False 2018/03 True True True 2017/02 False True False 2017/01 True False False 开头,另一种直接使用:jar:file:org/springframework/...

也许当您进行其他人建议的更改时,您仅对其中一个位置进行了更改吗?

但是无论如何,我都面临着同样的问题。添加org/springframework/...作为前缀对我来说是固定的。我正在使用Java配置来注入脚本位置。以前是这样(“不可行的情况”):

classpath:

但是更改为以下内容后,它起作用了:

@Value("org/springframework/batch/core/schema-drop-postgresql.sql")
private Resource dropRepositoryTables;

@Value("org/springframework/batch/core/schema-postgresql.sql")
private Resource dataRepositorySchema;

然后按如下所示使用值:

@Value("classpath:org/springframework/batch/core/schema-drop-postgresql.sql")
private Resource dropRepositoryTables;

@Value("classpath:org/springframework/batch/core/schema-postgresql.sql")
private Resource dataRepositorySchema;