Я был вовлечен в разработку одной journy системы планировщика для Стокгольмского Общественного транспорта в Швеции. Это было основано на алгоритме Djikstra, но с завершением, прежде чем каждый узел посетили в системе. Сегодня, когда существуют надежные координаты, доступные для каждой остановки, я предполагаю*, алгоритм был бы выбором.
Данные о предстоящем трафике регулярно извлекались из нескольких баз данных и компилировались в большие таблицы, загруженные в память нашего кластера поискового сервера.
Один ключ к sucessfull algorith использовал функцию стоимости пути на основе времени прохождения и времени ожидания, умноженного на различные веса. Известный на шведском языке как “kresu" разовый эти взвешенные времена отражают то, что, например, одно minute’s время ожидания обычно эквивалентно в “inconvenience” двум минутам времени перемещения.
область А назвал область, где Вы путешествуете, может запуститься или закончиться. Автобусная остановка могла быть областью с двумя Остановками. Большая Станция с несколькими платформами могла быть одной областью с одной остановкой для каждой платформы. Данные: Имя, Остановки в области
Остановки массив со всеми автобусными остановками, вокзалами и станциями метро. Обратите внимание обычную необходимость в двух остановках, один для каждого направления, потому что оно занимает время, чтобы пересечь улицу или идти на другую платформу. Данные: Имя, Ссылки, Узлы
Ссылки А перечисляют с другими остановками, которых можно достигнуть путем обхода от этой остановки. Данные: Другая Остановка, Время для обхода к другой Остановке
Строки/Тур у Вас есть число на шине и месте назначения. Шина запускается на одной остановке и передает несколько остановок, продвигающихся месту назначения. Данные: Число, Имя, Место назначения
Узлы Обычно у Вас есть расписание с наименьшим время для того, когда это должно быть на первой и последней остановке на Туре. Каждый раз шина/железнодорожные абонементы остановка Вы добавляете новый узел к массиву. Эта таблица может иметь миллионы значений в день. Данные: строка/Тур, Остановка, Время поступления, Время отправления, Допуск на погрешность, Следующий Узел на Туре
Поиск Массив с тем же размером как массив Узлов раньше хранил, как Вы добрались там и стоимость пути. Данные: обратный канал с Предыдущим Узлом (не набор, если Узел не посещают), Стоимость Пути (бесконечность для непосещаемого)
Вы должны поместить его в корневой каталог, который соответствует вашему контексту выполнения.
Пример:
MyProject
src
MyClass.java
log4j.properties
Если вы начинаете выполнение из другого проекта, вам необходимо иметь этот файл в проекте используется для начала исполнения. Например, если другой проект содержит несколько тестов JUnit, он также должен иметь свой файл log4j.properties.
Я предлагаю использовать log4j.xml вместо log4j.properties. У вас есть больше возможностей, помощь в IDE и т. Д.
Файл должен находиться в каталоге WEB-INF / classes. Эта структура каталогов должна быть упакована в файл war.
Несколько технически правильных конкретных ответов уже даны, но в целом, это может быть любое место в runtime classpath, т.е. везде, где классы ищутся JVM.
Это может быть каталог /src в Eclipse или каталог WEB-INF/classes в вашем развернутом приложении, но лучше всего знать концепцию classpath и то, почему файл помещается в него, не стоит просто относиться к WEB-INF/classes как к "волшебному" каталогу.
Вы можете указать расположение файла конфигурации с помощью аргумента виртуальной машины -Dlog4j.configuration = "file: / C: /workspace3/local/log4j.properties"
Я знаю, что уже поздновато отвечать на этот вопрос, и, возможно, вы уже нашли решение, но я выкладываю решение, которое я нашел (после того, как я много гуглил), так что это может немного помочь:
-Dlog4j.debug
в конце опций java в tomcatНадеюсь, это поможет.
rgds