2015-09-21 2 views
1

Я следил за this tutorial на весенний ботинок.Зачем импортировать.sql в Spring Boot?

Парень идет довольно быстро, но похоже, что с нашим кодом все одинаково. Когда я дошел до точки, чтобы посмотреть консоль H2, я заметил, что мне не хватает таблицы Speaker.

Я видел много вопросов здесь, блоги повсюду, и кажется все, что вам нужно сделать, это иметь файл в main/resources и он работает. Ну, это не так!

В некоторых ответах говорится о persistence.xml и/или файле конфигурации для H2. Ну, у меня их нет, и не этот учебник, и все же его работы.

Я нахожу, что некоторые из самых, казалось бы, простых вещей ужасно расстраивают Весной, и мне надоело оглядываться и найти тот же ответ, который не работает.

Может кто-то пролить свет на то, почему это не получится?

Я не могу представить, что еще мне понадобится в стороне от моего pom.xml, так как учебник просто добавляет import.sql и, как и все остальные, - это просто работает. При необходимости добавьте больше.

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.test</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>demo</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.6.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-configuration-processor</artifactId> 
      <optional>true</optional> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

import.sql

INSERT INTO SPEAKER(ID, FIRST_NAME, LAST_NAME, TWITTER, BIO) VALUES (0, 'Foo', 'Baz', 'foobaz', 'Foo Baz hates Twitter'); 
INSERT INTO SPEAKER(ID, FIRST_NAME, LAST_NAME, TWITTER, BIO) VALUES (1, 'Bar', 'Baz', 'barbaz', 'Bar Baz hates Twitter too'); 
INSERT INTO SPEAKER(ID, FIRST_NAME, LAST_NAME, TWITTER, BIO) VALUES (2, 'Santa', 'Clause', 'saintnick', 'Santa is a Twitter champ'); 
+0

'import.sql' не используется (или не должно) для создания таблиц, для чего используется' schema.sql'. Итак, что находится в 'import.sql'. Как правило, создание схемы выполняется с помощью «schema.sql» или отправляется поставщику JPA. –

+0

@ M.Deinum, это интересно. Это именно то, что делает парень. Я переименую его и посмотрю, а также содержимое объявления здесь. Это также то же самое, что и заявления ... – ChiefTwoPencils

+0

Рядом с тем H2 (как я увидел в учебнике) сначала используется как база данных памяти, с которой вы не можете подключиться. Поэтому, если вы пытаетесь использовать консоль для подключения к базе данных в памяти, она не будет работать, поскольку вы увидите новую базу данных, а не ту, что используется в учебнике. По крайней мере, для внешней консоли, если вы используете сервлет, зарегистрированный в учебнике, он должен работать (так как это должно повторно использовать существующий источник данных). –

ответ

1

Я нашел ответ в незначительных, но важных деталей с небольшим количеством более тщательного исследования. По-видимому, когда консоль запущена, она добавила значения по умолчанию в записи формы, а другая отличалась от руководства.

Для JDBC URL по умолчанию jdbc:h2:~/test.

enter image description here

мне пришлось изменить его на jdbc:h2:mem:testdb.

enter image description here

Я теперь в состоянии увидеть Speaker таблицу и данные.

Как только я сделал изменение, он остался по умолчанию. Я полагаю, автор уже сделал это, и я пропустил разницу.

Спасибо за помощь @M. Deinum!

+1

вы можете изменить имя источника данных через 'spring.datasource.name'; его значением по умолчанию является 'testdb'. –