我的Resources文件夹中有一个schema.sql
文件和application-dev.yml
用于应用程序设置,它看起来如下:
-- Drop the tables
DROP TABLE IF EXISTS customers;
-- Create tables
CREATE TABLE customers (
id SERIAL,
first_name VARCHAR(255),
last_name VARCHAR(255)
);
-- Populate data
INSERT INTO customers(first_name, last_name) VALUES ('Jane', 'Doe');
INSERT INTO customers(first_name, last_name) VALUES ('Josh', 'Gruber');
INSERT INTO customers(first_name, last_name) VALUES ('Hans', 'Gruber');
INSERT INTO customers(first_name, last_name) VALUES ('John', 'Doe');
但是当应用程序启动时它并没有被引导,因为当我尝试在程序中查询它时,我收到一条错误,说“客户'不存在。我已尝试手动设置属性spring.datasource.schema: 'schema.sql'
,但收到错误消息[\schema.sql] resource doesn't exist on the classpath
。我知道这是事实,因为application-dev.yml
必须是类路径上的属性甚至被读取(它被读取并导致找不到资源的错误)。
我是否混淆了类路径,或者我是否缺少一些可以指定每次应用程序在开发环境中运行时如何初始化数据库的属性?
答案 0 :(得分:0)
作为一种变通方法,我检查了我的个人资料(spring.profiles.active
)是否包含dev
,如果是,则执行资源schema.sql
。令人惊讶的是,ResourceDatabasePopulator
在运行时发现了没有错误。以下是我用作解决方案的代码:
@Autowired
Environment env;
// If the environment is dev, then run schema.sql to reinitialize the schema and repopulate test data
if(env.getActiveProfiles()[0].equalsIgnoreCase("dev")) {
Resource resource = new ClassPathResource("schema.sql");
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(resource);
databasePopulator.execute(dataSource);
}