如何使用Spring Boot将H2连接到远程数据库而不是嵌入模式? [英] How do you connect to H2 as a remote database instead of embedded mode using Spring Boot?

查看:327
本文介绍了如何使用Spring Boot将H2连接到远程数据库而不是嵌入模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于我的小型Spring Boot应用程序,我在src / main / resources下有这个配置:

I have this configuration under src/main/resources for my little Spring Boot application:

server.port = 8090
spring.datasource.driverClassName = org.h2.Driver
spring.datasource.url = jdbc:h2:file:~/stapler

我知道此配置已正确选取,因为应用程序启动日志中有有效的端口号8090。还有一个@PostConstruct initDb()方法,它创建数据并将数据插入该数据库的2个表中:

I know this configuration is picked up properly, cause there is valid port number 8090 in application startup log. There is also a @PostConstruct initDb() method which creates and inserts data into 2 tables of that database:

package com.avk.stapler.init;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.PostConstruct;

@SpringBootApplication
public class DbInitializer {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public static void main(String[] args) {
        SpringApplication.run(DbInitializer.class, args);
    }

    @PostConstruct
    private void initDb() {
        System.out.println("Creating table employees");
        jdbcTemplate.execute("drop table employees if exists");
        jdbcTemplate.execute("create table employees(id serial, name varchar(255), surname varchar(255))");
        jdbcTemplate.execute("insert into employees(name, surname) values('Jan', 'Kowalski')");
        jdbcTemplate.execute("insert into employees(name, surname) values('Stefan', 'Nowak')");


        System.out.println("Creating table allocations");
        jdbcTemplate.execute("drop table allocations if exists");
        jdbcTemplate.execute("create table allocations(id serial, week int, year int, shift int, employee_id bigint)");
        jdbcTemplate.execute("insert into allocations(week, year, shift, employee_id) values(29, 2015, 1, 1)");
        jdbcTemplate.execute("insert into allocations(week, year, shift, employee_id) values(28, 2015, 2, 1)");
        jdbcTemplate.execute("insert into allocations(week, year, shift, employee_id) values(29, 2015, 3, 2)");
        jdbcTemplate.execute("insert into allocations(week, year, shift, employee_id) values(28, 2015, 2, 2)");
    }
}

我可以在启动时看到这个,我不知道t认为有更多关于数据库的日志:

I can see this logged on startup, I don't think there are more logs regarding DB:

2015-09-30 22:41:22.948  INFO 2832 --- [           main] o.s.j.d.e.EmbeddedDatabaseFactory        : Creating embedded database 'testdb'
Creating table employees
Creating table allocations

由于上述原因,我想在我的主目录中看到stapler.h2.db文件,但实际情况并非如此。这里要更改DB文件应该更改什么?

And as a result of above, I'd like to see a "stapler.h2.db" file in my home directory, which is not the case. What should be changed here for the DB file to appear?

推荐答案

确保你的maven依赖项看起来像这样:

Make sure that your maven dependencies look like this:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</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>
</dependencies>

如果你想使用JDBC作为远程数据库,你需要确保你是已在您的连接URL中的指定文件路径上运行H2数据库。

If you want to use H2 as a remote database using JDBC, you need to make sure that you are already running an H2 database at the specified file path in your connection url.

如果您尚未安装H2,则可以获得在服务器模式下运行H2的说明这里: http://www.h2database.com/html/tutorial.html#tutorial_starting_h2_console

If you haven't already installed H2, you can get the instructions to run H2 in server mode here: http://www.h2database.com/html/tutorial.html#tutorial_starting_h2_console

运行后,可以使用您提供的相同JDBC连接URL连接到它。只需使用以下应用程序属性。

Once you have it running, you can connect to it using the same JDBC connection URL you've provided. Just use the following application properties.

spring.datasource.url=jdbc:h2:tcp://localhost/~/stapler
spring.datasource.username=sa
spring.datasource.password=

如果您宁愿嵌入式H2数据库创建H2文件,那也是可能的。只需使用下面的配置。

If you'd rather that the embedded H2 database create your H2 file, that's also possible. Just use the configuration below.

spring.datasource.url=jdbc:h2:file:~/stapler;AUTO_SERVER=true
spring.datasource.username=
spring.datasource.password=

这是可能的创建的文件将命名为 stapler.mv.db 。要告诉H2嵌入式使用 stapler.h2.db ,您可以在此处学习如何执行此操作:为什么我的嵌入式h2程序写入.mv.db文件

It's possible that the file that is created will be named stapler.mv.db. To tell H2 embedded to use stapler.h2.db instead, you can learn how to do that here: Why is my embedded h2 program writing to a .mv.db file

(非常感谢StéphaneNic​​oll帮我回答这个问题)

(Big thanks to Stéphane Nicoll for helping me answer this one)

这篇关于如何使用Spring Boot将H2连接到远程数据库而不是嵌入模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆