Check if H2 db file exists
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 |
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 |
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 '18 at 6:59
mmaceachranmmaceachran
1,13512552
1,13512552
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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 |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
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
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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 |
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 |
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 '18 at 8:50
answered Nov 22 '18 at 7:25
user10639668
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.
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