Весенняя загрузка останавливается, когда я пишу несколько JPA-запросов в хранилище
Я использую весеннюю загрузку с базой данных H2. Мое приложение останавливается с текстом ниже на консоли.
2016-08-01 10:36:08.610 INFO 3920 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2016-08-01 10:36:08.651 INFO 3920 --- [ost-startStop-1] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}
2016-08-01 10:36:08.651 INFO 3920 --- [ost-startStop-1] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2016-08-01 10:36:08.651 INFO 3920 --- [ost-startStop-1] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2016-08-01 10:36:08.801 INFO 3920 --- [ost-startStop-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2016-08-01 10:36:09.031 INFO 3920 --- [ost-startStop-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2016-08-01 10:36:09.131 INFO 3920 --- [ost-startStop-1] o.h.h.i.ast.ASTQueryTranslatorFactory : HHH000397: Using ASTQueryTranslatorFactory
2016-08-01 10:36:09.291 INFO 3920 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000228: Running hbm2ddl schema update
2016-08-01 10:36:09.291 INFO 3920 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000102: Fetching database metadata
2016-08-01 10:36:09.301 INFO 3920 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000396: Updating schema
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000261: Table found: TEST.PUBLIC.EMAILDATA
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000037: Columns: [quantity, emailto, id, autostart, emailfrom]
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000108: Foreign keys: []
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000126: Indexes: [primary_key_2]
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000261: Table found: TEST.PUBLIC.STATUS
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000037: Columns: [exchangefile, consolidate, processdate, aggregateall, scriptmaster, sendmail, id, insiderstrade]
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000108: Foreign keys: []
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] o.hibernate.tool.hbm2ddl.TableMetadata : HHH000126: Indexes: [primary_key_9]
2016-08-01 10:36:09.311 INFO 3920 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000232: Schema update complete
Мой репозиторий:
@Transactional
public interface EmailDataRepository extends JpaRepository<EmailData,Long>{
@Query("SELECT p FROM EmailData P")
public EmailData findLastRow();
}
И DBConfig это:
@Configuration
@EnableTransactionManagement
@ComponentScan("com.demo.*")
@PropertySource("classpath:application.properties")
@EntityScan(basePackages = {"com.demo.model"})
@EnableJpaRepositories("com.demo.repository.main")
public class DBConfig {....}
Модель:
@Entity
@Table(name="EmailData")
public class EmailData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
private String emailTo;
private String emailFrom;
private String quantity;
private Boolean autoStart;
...}
1 ответ
Ваш H2
URL базы данных должен иметь следующую конфигурацию
DB_CLOSE_ON_EXIT=FALSE
В документации Spring Boot есть цитата:
Если по какой-либо причине вы конфигурируете URL-адрес подключения для встроенной базы данных, следует позаботиться о том, чтобы отключить автоматическое отключение базы данных. Если вы используете H2, вы должны использовать DB_CLOSE_ON_EXIT=FALSE, чтобы сделать это. Если вы используете HSQLDB, убедитесь, что shutdown=true не используется. Отключение автоматического выключения базы данных позволяет Spring Boot контролировать, когда база данных закрыта, тем самым гарантируя, что это произойдет, когда доступ к базе данных больше не нужен.