Невозможно использовать файл свойств базы данных в JavaLite

Не удалось загрузить файл свойств базы данных.

У меня есть мой database.properties файл в папке ресурсов пути к классу, и я настроил activejdbc.properties в корне classpathenv.connections.file=MyProject/src/main/resources/database.properties

Я использую mvn для запуска моего приложения:

mvn process-classes

mvn activejdbc-instrumentation:instrument

mvn package

mvn compile exec:java

Когда я запускаю приложение с Base.open() Я получаю ошибку:

org.javalite.activejdbc.DBException: Could not find configuration in a property file for environment: development. Are you sure you have a database.properties file configured?
        at org.javalite.activejdbc.DB.open(DB.java:151)
        at org.javalite.activejdbc.Base.open(Base.java:52)
        at com.soul.seeker.Application.lambda$main$0(Application.java:52)
        at spark.FilterImpl$1.handle(FilterImpl.java:62)
        at spark.http.matching.BeforeFilters.execute(BeforeFilters.java:48)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:129)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)

Обновить:

Запуск сэмпла из javalite github работает нормально, однако, изменив это с помощью Spark Routing, выдается ошибка:

get("/role_on_login", (req, res) -> {
    Base.open();

    Person director = new Person("Stephen Spielberg");
    director.saveIt();

    director.add(new Movie("Saving private Ryan", 1998));
    director.add(new Movie("Jaws", 1982));
    List data = director.getAll(Movie.class);
    Base.close();

    return data;
});

Ошибка:

[qtp1213754379-16] WARN org.eclipse.jetty.server.HttpChannel - //localhost:4567/role_on_login
org.javalite.activejdbc.DBException: there is no connection 'default' on this thread, are you sure you opened it?
        at org.javalite.activejdbc.DB.connection(DB.java:754)
        at org.javalite.activejdbc.DB.createStreamingPreparedStatement(DB.java:521)
        at org.javalite.activejdbc.DB.find(DB.java:512)
        at org.javalite.activejdbc.LazyList.hydrate(LazyList.java:329)
        at org.javalite.activejdbc.AbstractLazyList.toString(AbstractLazyList.java:190)
        at spark.serialization.DefaultSerializer.process(DefaultSerializer.java:38)
        at spark.serialization.Serializer.processElement(Serializer.java:49)
        at spark.serialization.Serializer.processElement(Serializer.java:52)
        at spark.serialization.Serializer.processElement(Serializer.java:52)
        at spark.serialization.SerializerChain.process(SerializerChain.java:53)
        at spark.http.matching.Body.serializeTo(Body.java:72)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:189)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
        at java.lang.Thread.run(Unknown Source)

Так что похоже на вопрос нить, где javalite Base.open() создает поток с именем "default", и spark не может понять поток с именем "default"

2 ответа

Вы должны понимать, как работают жизненные циклы Maven.

  1. Не нужно звонить mvn activejdbc-instrumentation:instrument
  2. Не выполнять compile до exec.java

Просто сделай это:

mvn package
mvn exec:java

Поскольку вы не предоставили никакой дополнительной информации в своем файле pom.xml, я предполагаю, что это типично для конфигурации ActiveJDBC Maven.

Это второй ответ на вторую часть вашего вопроса, который вы добавили последним.

Причина, по которой у вас нет соединения, заключается в том, что ActiveJDBC по умолчанию ленив: http://javalite.io/lazy_and_eager. Это означает, что во время выполнения вашей искры get() Метод, вы открываете и закрываете соединение с базой данных. data Объект, который вы передаете представлению, не имел возможности загрузить данные из базы данных. Есть три способа решить эту проблему:

  1. Вызвать прямое обращение к базе данных:

    Base.open ();

    Person director = new Person("Stephen Spielberg");
    director.saveIt();
    
    director.add(new Movie("Saving private Ryan", 1998));
    director.add(new Movie("Jaws", 1982));
    List data = director.getAll(Movie.class);
    data.size(); // <<<-- force trip to database before closing connection
    Base.close();
    return data;
    
  2. Используйте фильтры Spark сверху открывать и закрывать соединения с БД и не загрязнять код в вашем get() методы: http://sparkjava.com/documentation.html

  3. Используйте ActiveWeb, который хорошо интегрирован с ActiveJDBC: http://javalite.io/activeweb

Другие вопросы по тегам