【问题标题】:How to execute postgres sql block from spring-boot如何从spring-boot执行postgres sql块
【发布时间】:2017-02-15 04:13:08
【问题描述】:

我必须从 Spring Boot 应用程序执行一段 sql 脚本(通常是一个函数)。我不能将此功能保留在我的 postgres 数据库中,因为我想在应用程序级别进行维护。我尝试使用schema.sql(来自资源文件夹),这看起来像是仅在服务器启动期间执行。

但是我想在每次需要时通过 JPA 或 JDBCTemplate 调用这个 plsql 块。

除了schema.sql 之外的其他可以按需执行的替代方案吗?

【问题讨论】:

  • 那为什么不能只使用 JPA 或 JdbcTemplate 呢?
  • 问题是我需要在资源文件夹下的一个 sql 文件中有这个 plsql 块,我应该从 JPA 调用这个 sql 文件。
  • 所以只需将文件读入字符串并使用JdbcTemplate执行即可。您似乎想多了,或者对什么是 spring-boot 有一些误解。
  • 只需从您的 JPA 提供程序获取 JDBC 连接并编写一些 JDBC 来执行您的 schema.sql

标签: java postgresql jpa spring-boot


【解决方案1】:

在单元测试中有@Sql 注释,您可以使用它来执行脚本:

@RunWith(SpringRunner.class)
@SpringBootTest
@Sql("/reset_sequences.sql")
public class ModuleTemplateRepositoryTests { ... }

为了从 Spring 应用程序启动自定义 sql 脚本,我们使用了 ScriptUtils (stackoverflow here)

@Value("classpath:reset_sequences.sql")
Resource script;

@Autowired
JdbcTemplate jdbcTemplate;

...
ScriptUtils.executeSqlScript(
    jdbcTemplate.getDataSource().getConnection(), script);

【讨论】:

    【解决方案2】:

    如果您将函数存储在数据库中,您可以查看此示例here

    【讨论】:

    • 对不起,我的函数没有存储在数据库中。我应该执行 plsql 块而不存储在数据库中。
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2014-11-27
    • 2018-09-04
    • 2019-07-18
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多