如何使用Spring Boot将H2连接到远程数据库而不是嵌入模式?

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

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

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

 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)"); } } 

我可以看到这个登录启动,我不认为有更多关于数据库的日志:

 2015-09-30 22:41:22.948 INFO 2832 --- [ main] osjdeEmbeddedDatabaseFactory : Creating embedded database 'testdb' Creating table employees Creating table allocations 

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

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

   org.springframework.boot spring-boot-starter-jdbc   com.h2database h2   org.springframework.boot spring-boot-starter-test test   

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

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

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

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

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

 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文件

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