Запустите загрузочный проект без настройки источника данных в application.properties - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть проект с начальной загрузкой, в котором конфигурация базы данных должна быть сохранена при первом запуске приложения пользователем после запроса данных соединения (URL-адрес сервера, имя пользователя и пароль). файл application.properties, вставленный в WAR-файл приложения, должен выглядеть примерно так:

security.basic.enabled=false

# THYMELEAF (ThymeleafAutoConfiguration)
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false

# Multipart Configuration
spring.servlet.multipart.maxFileSize = 150MB
spring.servlet.multipart.maxRequestSize = 150MB
spring.servlet.multipart.fileSizeThreshold = 5MB

# Setting max size of post requests to 6MB (default: 2MB)
server.tomcat.max-http-post-size=157286400

После первого запуска следует создать второй application.properties с конфигурацией базы данных. Но прямо сейчас, когда я пытаюсь запустить проект с указанной выше конфигурацией, он не запускается, показывая следующее сообщение об ошибке:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
        If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
        If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

без предоставления приложению изменения для создания второго файла конфигурации с Свойства базы данных.

Как я могу заставить приложение запускаться в первый раз, даже без базы данных?

update

Хорошо, тогда я избавиться от этого сообщения об ошибке, сохранив эти 2 зависимости на моем pom.xml:

  <dependency>
       <groupId>org.postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>LATEST</version>
  </dependency>

  <dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.1</version>
  </dependency>

, и теперь приложения работают без ошибок, и я могу открыть страницу установки для создания базы данных на * Сервер 1046 * и импортируйте исходные данные (включая пользовательские данные).

Но я замечаю, что эти исходные данные не сохраняются на сервере postgresql (несмотря на то, что база данных и все таблицы создаются нормально) , Я подозреваю, что они создаются в гипер-базе данных Sql в памяти, что мне совсем не помогает.

Я предполагаю, что это произошло потому, что я автоматически связал некоторые классы Dao для этих объектов в моем классе InstallService, и код создает данные только на postgresql, где я непосредственно устанавливаю соединение с этим указанным c сервером.

Считаем, что метод, ответственный за заполнение исходных данных в моей базе данных, выглядит примерно так:

  public void criarUsuario(String user, String pass, String nome, String sobrenome, String email) {
    Usuario novo = new Usuario();
    novo.setUsername(user);
    novo.setPassword(pass);
    novo.setFirstName(nome);
    novo.setLastName(sobrenome);
    novo.setEmail(email);
    novo.setEnabled(true);
    novo.setLocked(false);
    novo.setCredenciais(new ArrayList<Credencial>());
    novo.getCredenciais().add( credencialDao.findBy("nome", "admin") );
    usuarioDao.insert(novo);
    ...
  }

Что я мог бы изменить здесь, чтобы сохранить эти данные в базе данных postgresql вместо гипер-базы данных Sql?

update 2

Теперь мне удалось запустить приложение, даже имея только зависимость postgresql от моего pom.xml. Я сделал это, добавив начальную конфигурацию на моем первом application.properties (locatd на /src/main/resources):

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/appdata
spring.datasource.username=...
spring.datasource.password=..
spring.datasource.continue-on-error=true

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none
spring.jpa.generate-ddl=false

Но когда я пытался получить доступ к приложению в браузере, я получил сообщение о том, что база данных не существуют (конечно, нет, когда я запускаю приложение в первый раз, когда у меня есть определенный c поток для создания базы данных, таблиц и заполнения исходных данных).

есть ли способ подавить эту "базу данных не существует "ошибка при запуске проекта?

...