当前位置: 首页 > 知识库问答 >
问题:

带有H2文件数据库的Spring Boot应用程序

宁侯林
2023-03-14

我正在尝试在spring boot应用程序启动时设置H2数据库。我已在Application.Properties中配置了数据库:

spring.datasource.url = jdbc:h2:file:~/testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

        CreateH2Database createH2Database = new CreateH2Database();
        createH2Database.create();
    }
}
public class CreateH2Database {

    private Logger log = Logger.getLogger(CreateH2Database.class);

    @Autowired
    protected JdbcTemplate jdbcTemplate;

    public void create() {
        log.info("Creating H2 Database");
        createUsers();
    }

    private void createUsers() {
        log.info("Creating users table");
        jdbcTemplate.execute("create table if not exists users (id serial, first_name varchar(255), last_name varchar(255))");
        String[] names = "John Woo;Jeff Dean;Josh Bloch;Josh Long".split(";");
        for (String fullname : names) {
            String[] name = fullname.split(" ");
            log.info("Inserting user record for " + name[0] + " " + name[1] + "\n");
            jdbcTemplate.update(
                "INSERT INTO users(first_name,last_name) values(?,?)",
                name[0], name[1]);
            }
        }
    }
  1. 我在jdbctemplate.execute上获得一个NullPointerException。如何注入jdbctemplate?我看到的所有示例都要求手动创建datasource,然后创建JdbcTemplate。但是,本例中的datasource似乎是基于application.properties值创建的。
  2. 这是设置数据库的正确方法吗(即在启动SpringApplication之后调用createh2database)?如果我想在另一个应用服务器上作为WAR运行应用程序,这种方法是否有效?

共有1个答案

宗政松
2023-03-14

由于您使用的是Spring Boot,因此应该利用它的数据库初始化特性。没有必要推出您自己的实现。

您所要做的只是将schema.sqldata.sql文件放在类路径的根上(很可能在/resources下)。Spring Boot将自动检测这些,并运行第一个以创建数据库,第二个以填充数据库。

请查看Spring Boot文档的这一部分

如果您需要有条件地执行初始化(也许只在运行集成测试时),您可以利用Spring概要文件。在这种情况下,您要做的是让测试概要文件的属性文件包含

而其他配置文件的属性文件将包含

spring.datasource.initialize=false

 类似资料:
  • Weblogic是否有任何免费可用的应用程序(war文件),其中应用程序使用某种数据库? 如果这不是正确的地方,请将我重定向到正确的地方问这个问题。

  • 问题内容: 我只是在评估H2数据库…下载并解压缩了安装文件,并连接到的数据库。是我的主目录,不存在(我希望H2创建它)。 控制台似乎可以正常工作。我创建了一个表并向其中插入了一行。即使断开并重新连接控制台,我也可以看到并查询该表。 但是,我没有看到预期的文件。它在哪里? 问题答案: 您确定没有: 文件?如果没有,请尝试以下操作: 它的作用是寻找H2控制台的Java进程,获取其PID并列出该进程的所

  • 问题内容: 我遇到以下问题:当我尝试使用外部IP地址(PC的IP而不是本地IP的createTcpServer =在cmd.exe中运行ipconfig后我们看到的输出)时,发生以下错误: 服务器错误:异常打开端口“ 9092”(端口可能正在使用),原因:“ java.net.BindException:无法分配请求的地址:JVM_Bind” [90061-169] 但是,该端口未使用。我已经使用

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 我刚刚用Java8创建了springboot批处理应用程序,我想用Anotation为springbatch表创建一个数据库。 我想我必须创建配置文件,但我不知道怎么做。 @Configuration公共类ConfigBatch{ } 我导入“@ImportResource”生成一个错误,因为在我的java代码中有一个数据源,在我的xml文件中有一个数据源: 我只想在H2数据源中生成spring批