Невозможно использовать файл свойств базы данных в 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.
- Не нужно звонить
mvn activejdbc-instrumentation:instrument
- Не выполнять
compile
доexec.java
Просто сделай это:
mvn package
mvn exec:java
Поскольку вы не предоставили никакой дополнительной информации в своем файле pom.xml, я предполагаю, что это типично для конфигурации ActiveJDBC Maven.
Это второй ответ на вторую часть вашего вопроса, который вы добавили последним.
Причина, по которой у вас нет соединения, заключается в том, что ActiveJDBC по умолчанию ленив: http://javalite.io/lazy_and_eager. Это означает, что во время выполнения вашей искры get()
Метод, вы открываете и закрываете соединение с базой данных. data
Объект, который вы передаете представлению, не имел возможности загрузить данные из базы данных. Есть три способа решить эту проблему:
Вызвать прямое обращение к базе данных:
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;
Используйте фильтры Spark сверху открывать и закрывать соединения с БД и не загрязнять код в вашем
get()
методы: http://sparkjava.com/documentation.htmlИспользуйте ActiveWeb, который хорошо интегрирован с ActiveJDBC: http://javalite.io/activeweb