gpt4 book ai didi

java - 在应用程序启动时执行多个脚本

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:52 25 4
gpt4 key购买 nike

我将 DataSource 定义为 bean:

@Bean(name="dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:~/myDB");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}

它工作得很好,但是我需要为数据库创建指定模式并在其上加载数据。是否有机会像 Spring Data 一样执行这两个脚本(模式和数据脚本)?我发现的唯一东西是 datasource.setSchema() 而且我担心我必须指定它的完整路径。那么如何指定它,如果我的模式脚本位于 src/main/resources/ 路径? (我确实做到了,documentation 怎么说的,但是失败并显示一条消息)

There was an unexpected error (type=Internal Server Error, status=500). org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.h2.jdbc.JdbcSQLException: Schema "~/schema-h2.sql" not found [90079-193]

谢谢你的建议

最佳答案

你可以这样做:

import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;

@Bean(name="dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:~/myDB");
dataSource.setUsername("sa");
dataSource.setPassword("");

// schema init
Resource initSchema = new ClassPathResource("script/schema.sql");
DatabasePopulator databasePopulator = new ResourceDatabasePopulator(initSchema);
DatabasePopulatorUtils.execute(databasePopulator, dataSource);

return dataSource;
}

关于java - 在应用程序启动时执行多个脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com