Check if H2 db file exists
up vote
1
down vote
favorite
I have been using a real simple H2 DB on a file. I had my setup like this:
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:"+dbFileName);
Statement stat = conn.createStatement();
and on application startup, I would simply do:
File dbFile = new File("~/mydb.db");
if(!dbFile.exists()) {
String sql = -create my table here, etc...
}
But I am now trying to do this in a "correct" Spring Boot way. So I have my application.properties file to contain this:
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/mydb.db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
And I am trying to use the JdbcTemplate / Dao way of doing things. But I need to check if the DB is there at startup. So I want to do my previous check in the Application classes event listener for ApplicationReadyEvent. But how do I get a reference to the datasource url? I had is a a configuration property before and was automatically loaded, and I could still do that, but it would be in to places and that would be bad.
So what's the essayist / correct way to ensure this DB file is there when the application starts up. (and I want this in a JDBC way, no JPA please)
java spring spring-boot h2 spring-jdbc
add a comment |
up vote
1
down vote
favorite
I have been using a real simple H2 DB on a file. I had my setup like this:
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:"+dbFileName);
Statement stat = conn.createStatement();
and on application startup, I would simply do:
File dbFile = new File("~/mydb.db");
if(!dbFile.exists()) {
String sql = -create my table here, etc...
}
But I am now trying to do this in a "correct" Spring Boot way. So I have my application.properties file to contain this:
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/mydb.db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
And I am trying to use the JdbcTemplate / Dao way of doing things. But I need to check if the DB is there at startup. So I want to do my previous check in the Application classes event listener for ApplicationReadyEvent. But how do I get a reference to the datasource url? I had is a a configuration property before and was automatically loaded, and I could still do that, but it would be in to places and that would be bad.
So what's the essayist / correct way to ensure this DB file is there when the application starts up. (and I want this in a JDBC way, no JPA please)
java spring spring-boot h2 spring-jdbc
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I have been using a real simple H2 DB on a file. I had my setup like this:
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:"+dbFileName);
Statement stat = conn.createStatement();
and on application startup, I would simply do:
File dbFile = new File("~/mydb.db");
if(!dbFile.exists()) {
String sql = -create my table here, etc...
}
But I am now trying to do this in a "correct" Spring Boot way. So I have my application.properties file to contain this:
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/mydb.db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
And I am trying to use the JdbcTemplate / Dao way of doing things. But I need to check if the DB is there at startup. So I want to do my previous check in the Application classes event listener for ApplicationReadyEvent. But how do I get a reference to the datasource url? I had is a a configuration property before and was automatically loaded, and I could still do that, but it would be in to places and that would be bad.
So what's the essayist / correct way to ensure this DB file is there when the application starts up. (and I want this in a JDBC way, no JPA please)
java spring spring-boot h2 spring-jdbc
I have been using a real simple H2 DB on a file. I had my setup like this:
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:"+dbFileName);
Statement stat = conn.createStatement();
and on application startup, I would simply do:
File dbFile = new File("~/mydb.db");
if(!dbFile.exists()) {
String sql = -create my table here, etc...
}
But I am now trying to do this in a "correct" Spring Boot way. So I have my application.properties file to contain this:
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/mydb.db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
And I am trying to use the JdbcTemplate / Dao way of doing things. But I need to check if the DB is there at startup. So I want to do my previous check in the Application classes event listener for ApplicationReadyEvent. But how do I get a reference to the datasource url? I had is a a configuration property before and was automatically loaded, and I could still do that, but it would be in to places and that would be bad.
So what's the essayist / correct way to ensure this DB file is there when the application starts up. (and I want this in a JDBC way, no JPA please)
java spring spring-boot h2 spring-jdbc
java spring spring-boot h2 spring-jdbc
asked Nov 22 at 6:59
mmaceachran
1,12512352
1,12512352
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
You can use ApplicationListener then parse the spring.datasource.url
value:
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Value("${spring.datasource.url}")
private String databaseUrl;
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("Application started");
String path = databaseUrl.replace("jdbc:h2:file:", "");
System.out.println(path);
File dbFile = new File(path);
if (!dbFile.exists()) {
String sql = "etc";
}
}
}
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
You can use ApplicationListener then parse the spring.datasource.url
value:
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Value("${spring.datasource.url}")
private String databaseUrl;
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("Application started");
String path = databaseUrl.replace("jdbc:h2:file:", "");
System.out.println(path);
File dbFile = new File(path);
if (!dbFile.exists()) {
String sql = "etc";
}
}
}
add a comment |
up vote
3
down vote
accepted
You can use ApplicationListener then parse the spring.datasource.url
value:
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Value("${spring.datasource.url}")
private String databaseUrl;
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("Application started");
String path = databaseUrl.replace("jdbc:h2:file:", "");
System.out.println(path);
File dbFile = new File(path);
if (!dbFile.exists()) {
String sql = "etc";
}
}
}
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
You can use ApplicationListener then parse the spring.datasource.url
value:
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Value("${spring.datasource.url}")
private String databaseUrl;
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("Application started");
String path = databaseUrl.replace("jdbc:h2:file:", "");
System.out.println(path);
File dbFile = new File(path);
if (!dbFile.exists()) {
String sql = "etc";
}
}
}
You can use ApplicationListener then parse the spring.datasource.url
value:
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Value("${spring.datasource.url}")
private String databaseUrl;
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("Application started");
String path = databaseUrl.replace("jdbc:h2:file:", "");
System.out.println(path);
File dbFile = new File(path);
if (!dbFile.exists()) {
String sql = "etc";
}
}
}
edited Nov 23 at 8:50
answered Nov 22 at 7:25
Eugen Covaci
6986
6986
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53425429%2fcheck-if-h2-db-file-exists%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown