Мне нужно написать кварцевый планировщик для выполнения работы в Spring. Я также должен добавить еще одну функцию, чтобы приостановить ту же работу. Этот код присутствует в одном отдельном пакете.
Для запуска этих двух функций: 1. запустить задание 2. приостановить задание. Я написал 2 класса с помощью main (), которая выполняет их.
Проблема в том, что когда я запускаю main () для pauseJob, он запускает другой applicationContext вместо того, чтобы использовать тот же самый. Я использовал шаблон Singleton для инициализации applicationContext.
Класс Singleton для инициализации ApplicationContext
public class AppContext { private static ApplicationContext INSTANCE = null; private AppContext() { } public static ApplicationContext getIntance() { if (INSTANCE == null) { String[] contexts = new String[] {"classpath:/applicationContext.xml"}; INSTANCE = new ClassPathXmlApplicationContext(contexts); } return INSTANCE; } }
Класс для начала работы
public class StartJobQuartzMain {
public static void main(String[] args) throws Exception { AppContext.getIntance(); } }
Класс, чтобы приостановить задание
public class PauseJobQuartzMain {
public static void main(String[] args) throws Exception { ((TestPauseJob) AppContext.getIntance().getBean("testPauseJob")).pauseJob(); } }
Пожалуйста, расскажите мне, как получить тот же экземпляр applicationContext в PauseJobQuartzMain.java. Спасибо.
2 ответа
Создание синглтона не имеет к этому никакого отношения (это в некотором смысле требуется) ... Два основных класса java будут работать независимо друг от друга, так как это две разные программы со своей собственной виртуальной машиной Java , и не смогут делиться контекстом вашего приложения друг с другом.
Вы можете использовать базу данных или внешний файл (доступный для обоих) или что-то еще для этого ...
Надеюсь это поможет...
Вы не можете сделать это из другого основного класса, потому что вы определенно запускаете его из новой JVM. Так что у каждого из них есть свой синглтон. Вы можете рассмотреть возможность использования некоторого общего ресурса между двумя этими приложениями: db, file, JMS queue, наконец и т.д., или вы можете вызвать некоторую управляемую операцию через JMX. Но две JVM не могут совместно использовать память, особенно объекты Java, когда контекст приложения является одним из них.
Новые вопросы
spring
Spring Framework - это среда с открытым исходным кодом для разработки приложений на платформе Java. В ее основе лежит широкая поддержка компонентно-ориентированных архитектур, и в настоящее время в ней имеется более двадцати высокоинтегрированных модулей.