【发布时间】:2014-08-27 12:43:05
【问题描述】:
我正在尝试在 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
Application.java 文件:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
CreateH2Database createH2Database = new CreateH2Database();
createH2Database.create();
}
}
CreateH2Database.java:
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]);
}
}
}
一旦应用程序启动,它应该创建用户表(如果它不存在),并将用户插入到表中。如果表已经存在,我不希望它被修改。
- 我在
jdbcTemplate.execute上收到NullPointerException。我怎样才能得到jdbcTemplate注入?我看到的所有示例都需要手动创建数据源,然后创建 JdbcTemplate。但是,此示例中的数据源似乎是基于 application.properties 值创建的。 - 这是设置数据库的正确方法吗(即在启动 SpringApplication 后调用
CreateH2Database)?如果我想将应用程序作为 WAR 在另一个应用程序服务器上运行,这种方法是否可行?
【问题讨论】:
标签: java spring spring-boot