From 4efb78191dc6f75bc254cacaf41694b6375c5636 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 11 Jan 2022 21:53:14 +0100 Subject: [PATCH] #663 - new database backend: postgresql --- pom.xml | 9 +- .../de/deadlocker8/budgetmaster/Main.java | 3 + .../budgetmaster/authentication/User.java | 1 + .../utils/DatabaseConfiguration.java | 23 +++-- .../DatabaseConfigurationProperties.java | 89 +++++++++++++++++++ src/main/resources/application.properties | 1 + .../config/templates/settings.properties | 7 ++ 7 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfigurationProperties.java diff --git a/pom.xml b/pom.xml index 03a321318..1b067419b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>de.deadlocker8</groupId> <artifactId>BudgetMaster</artifactId> - <version>2.9.2</version> + <version>2.10.0</version> <name>BudgetMaster</name> <repositories> @@ -77,7 +77,7 @@ <app.versionDate>${maven.build.timestamp}</app.versionDate> <maven.build.timestamp.format>dd.MM.yy</maven.build.timestamp.format> - <app.versionCode>37</app.versionCode> + <app.versionCode>38</app.versionCode> <app.author>Robert Goldmann</app.author> <project.outputDirectory>build/${project.version}</project.outputDirectory> @@ -155,6 +155,11 @@ <version>${h2database.version}</version> </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + </dependency> + <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java index edbee1b17..6f269187e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/Main.java +++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java @@ -1,5 +1,6 @@ package de.deadlocker8.budgetmaster; +import de.deadlocker8.budgetmaster.utils.DatabaseConfigurationProperties; import de.thecodelabs.utils.io.PathUtils; import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.SystemUtils; @@ -11,6 +12,7 @@ import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.scheduling.annotation.EnableScheduling; @@ -25,6 +27,7 @@ import java.util.*; @EnableScheduling @SpringBootApplication +@EnableConfigurationProperties(DatabaseConfigurationProperties.class) public class Main extends SpringBootServletInitializer implements ApplicationRunner { private static final Logger LOGGER = LoggerFactory.getLogger(Main.class); diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java index 4fb314b07..d03f7f45d 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java +++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/User.java @@ -7,6 +7,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @Entity +@Table(name = "login_user") public class User { @Id diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java index 0938019d8..dd2b3b8b9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfiguration.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.utils; -import de.deadlocker8.budgetmaster.Main; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -8,18 +8,31 @@ import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Profile; import javax.sql.DataSource; -import java.nio.file.Path; +import java.text.MessageFormat; @Configuration @Profile("!test") public class DatabaseConfiguration { + DatabaseConfigurationProperties databaseConfig; + + @Autowired + public DatabaseConfiguration(DatabaseConfigurationProperties databaseConfig) + { + this.databaseConfig = databaseConfig; + } + @Bean @Primary public DataSource dataSource() { - Path applicationSupportFolder = Main.getApplicationSupportFolder(); - String jdbcString = "jdbc:h2:/" + applicationSupportFolder.toString() + "/" + "budgetmaster;DB_CLOSE_ON_EXIT=TRUE"; - return DataSourceBuilder.create().username("sa").password("").url(jdbcString).driverClassName("org.h2.Driver").build(); + final String jdbcString = MessageFormat.format("jdbc:postgresql://{0}:{1}/{2}", databaseConfig.getHostname(), Long.toString(databaseConfig.getPort()), databaseConfig.getDatabaseName()); + + return DataSourceBuilder.create() + .username(databaseConfig.getUsername()) + .password(databaseConfig.getPassword()) + .url(jdbcString) + .driverClassName("org.postgresql.Driver") + .build(); } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfigurationProperties.java b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfigurationProperties.java new file mode 100644 index 000000000..daea5a91f --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/DatabaseConfigurationProperties.java @@ -0,0 +1,89 @@ +package de.deadlocker8.budgetmaster.utils; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; + +@ConfigurationProperties(prefix = "budgetmaster.database") +public class DatabaseConfigurationProperties +{ + @NotBlank + private String hostname; + + @Min(1) + @Max(65536) + private int port; + + @NotBlank + private String databaseName; + + @NotBlank + private String username; + + @NotBlank + private String password; + + public String getHostname() + { + return hostname; + } + + public void setHostname(String hostname) + { + this.hostname = hostname; + } + + public int getPort() + { + return port; + } + + public void setPort(int port) + { + this.port = port; + } + + public String getDatabaseName() + { + return databaseName; + } + + public void setDatabaseName(String databaseName) + { + this.databaseName = databaseName; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + @Override + public String toString() + { + return "DatabaseConfigurationProperties{" + + "hostname='" + hostname + '\'' + + ", port=" + port + + ", databaseName='" + databaseName + '\'' + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a44ce63f3..f96ef5f3e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.mvc.log-resolved-exception=false +spring.jpa.show-sql=false spring.jpa.hibernate.ddl-auto=update spring.servlet.multipart.max-file-size=100MB diff --git a/src/main/resources/config/templates/settings.properties b/src/main/resources/config/templates/settings.properties index 2781007dd..4ae66e08f 100644 --- a/src/main/resources/config/templates/settings.properties +++ b/src/main/resources/config/templates/settings.properties @@ -2,6 +2,13 @@ server.port=9000 +### database settings ### +budgetmaster.database.hostname=localhost +budgetmaster.database.port=5432 +budgetmaster.database.databaseName=budgetmaster +budgetmaster.database.username=budgetmaster +budgetmaster.database.password=budgetmaster + ### SSL settings ### # do not change this property -- GitLab