【问题标题】:Spring MVC, How to read .sql file from src/main/resources directory when running?Spring MVC,运行时如何从 src/main/resources 目录读取 .sql 文件?
【发布时间】:2017-02-10 04:12:57
【问题描述】:

请帮助我解决这个问题。我有一个带有 Hibernate 的 Spring MVC 项目, 以及“src/main/resources/”目录中的 db.sql 文件。运行应用程序时如何执行 db.sql 文件中的脚本? 这是我的 db.sql 文件脚本。

    CREATE DATABASE IF NOT EXISTS `accounts`;
USE `accounts`;
--
-- Table structure for table `role`
--

DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id`   INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45)      DEFAULT NULL,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  AUTO_INCREMENT = 2
  DEFAULT CHARSET = utf8;

--
-- Dumping data for table `role`
--

LOCK TABLES `role` WRITE;
INSERT INTO `role` VALUES (1, 'ROLE_USER');
UNLOCK TABLES;

--
-- Table structure for table `user`
--

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id`             INT(11) NOT NULL AUTO_INCREMENT,
  `username`       VARCHAR(255)     DEFAULT NULL,
  `password`       VARCHAR(255)     DEFAULT NULL,
  `firstName`      VARCHAR(255)     DEFAULT NULL,
  `lastName`       VARCHAR(255)     DEFAULT NULL,
  `email`          VARCHAR(255)     DEFAULT NULL,
  `dateRegistered` DATE             DEFAULT NULL,
  `skypeID`        VARCHAR(255)     DEFAULT NULL,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  AUTO_INCREMENT = 4
  DEFAULT CHARSET = utf8;

--
-- Table structure for table `user_role`
--

DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
  `user_id` INT(11) NOT NULL,
  `role_id` INT(11) NOT NULL,
  PRIMARY KEY (`user_id`, `role_id`),
  KEY `fk_user_role_roleid_idx` (`role_id`),
  CONSTRAINT `fk_user_role_roleid` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_user_role_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;


DROP TABLE IF EXISTS `catalog`;
CREATE TABLE catalog (
  `id`         INT(11)      NOT NULL AUTO_INCREMENT,
  `user_id`    INT(11)      NOT NULL,
  `link`       VARCHAR(100) NOT NULL,
  `comment`    VARCHAR(100) NOT NULL,
  `type`       VARCHAR(100) NOT NULL,
  `insertDate` DATE                  DEFAULT NULL,
  `content`    LONGBLOB     NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_catalog` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

我阅读了一些关于这个的帖子,我发现了有用的结果,例如这个

Resource resource = applicationContext.getResource("classpath:db.sql");
InputStream is = resource.getInputStream();

但是我不知道如何在我的程序启动时执行这两行代码。 放在哪里。

【问题讨论】:

标签: hibernate spring-mvc


【解决方案1】:

在“HibernateConfiguration.java”中加入这个函数即可解决问题。

 @Bean
public DataSourceInitializer dataSourceInitializer() {
    ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
    resourceDatabasePopulator.addScript(new ClassPathResource("/data.sql"));

    DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
    dataSourceInitializer.setDataSource(dataSource());
    dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
    return dataSourceInitializer;
}

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2015-09-16
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多