Schema.sql не найден в classpath для приложения Spring - PullRequest
0 голосов
/ 16 мая 2018

У меня есть файл 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 должно быть на пути к классам для свойств, которые должны быть даже прочитаны (которые читаются и приводят к ошибке ресурса, который не найден).

Могу ли я поиграть с classpath или мне не хватает какого-либо свойства, которое может указывать, как инициализировать мою базу данных каждый раз, когда приложение запускается в среде разработчика?

1 Ответ

0 голосов
/ 16 мая 2018

В качестве обходного решения я проверил, содержит ли мой профиль (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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...