2013-03-12 3 views
4

У меня есть проект Spring. Он отлично работает с тестовым примером junit. juint вызывает applicationcontext.xml, и проект выполняется успешно. Но я хочу запустить проект без использования jUnit. Вот мой JUnit Test CaseКак загрузить Spring Application Context

package com.dataload; 

import org.apache.log4j.Logger; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.batch.core.Job; 
import org.springframework.batch.core.JobParameters; 
import org.springframework.batch.core.launch.JobLauncher; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.transaction.TransactionConfiguration; 
import org.springframework.util.StopWatch; 

@ContextConfiguration(locations = "classpath:com/dataload/applicationcontext.xml") 
@RunWith(SpringJUnit4ClassRunner.class) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false) 
public class SICSVDataTestCase { 

    private final static Logger logger = Logger 
      .getLogger(SICSVDataTestCase.class); 

    @Autowired 
    private JobLauncher launcher; 

    @Autowired 
    private Job job; 
    private JobParameters jobParameters = new JobParameters(); 

    @Test 
    public void testLaunchJob() throws Exception { 
     StopWatch sw = new StopWatch(); 
     sw.start(); 
     launcher.run(job, jobParameters); 
     sw.stop(); 
     logger.info(">>> TIME ELAPSED:" + sw.prettyPrint()); 
    } 
} 

Это TestCase запустить проект. Но я хочу использовать другой класс, который может вызвать applicationcontext.xml и запустить проект.

То есть,

package com.dataload; 

public class insertCSV 
{ 
    public static void main(String args[]) 
    { 
     /* Code to run the project */ 
    } 
} 

Может кто-нибудь предложить мне, как код? Благодаря

ответ

11

Добавьте это в начале главного

ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); 

JobLauncher launcher=(JobLauncher)context.getBean("launcher"); 
Job job=(Job)context.getBean("job"); 

//Get as many beans you want 
//Now do the thing you were doing inside test method 
StopWatch sw = new StopWatch(); 
sw.start(); 
launcher.run(job, jobParameters); 
sw.stop(); 
//initialize the log same way inside main 
logger.info(">>> TIME ELAPSED:" + sw.prettyPrint()); 
+0

Спасибо. Его загрузка. Но когда я запускаю тестовый пример, мне не нужно было вызывать все методы в другом классе. Он выполнялся автоматически. Но здесь он загружает только applicationcontext.xml. Почему это происходит? –

+0

Если в вашем приложенииContext есть все компоненты, которые будут инициализированы, это будет работать нормально. Если вы хотите вызывать другие вещи, вам нужно вручную сделать это после загрузки контекста приложения. Как вы хотите, чтобы ваш основной класс вел себя? – Anubhab

+0

Проверьте edit..I думаю, что вам нужно – Anubhab

1

Я использую в пути, и это работает для меня.

public static void main(String[] args) { 
    new CarpoolDBAppTest(); 

} 

public CarpoolDBAppTest(){ 
    ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml"); 
    Student stud = (Student) context.getBean("yourBeanId"); 
} 

Здесь Student - мой класс, вы получите класс, соответствующий yourBeanId.

Теперь работайте над этим объектом с любой операцией, которую вы хотите сделать.

1
package com.dataload; 

    public class insertCSV 
    { 
     public static void main(String args[]) 
     { 
      ApplicationContext context = 
     new ClassPathXmlApplicationContext("applicationcontext.xml"); 


      // retrieve configured instance 
      JobLauncher launcher = context.getBean("laucher", JobLauncher.class); 
      Job job = context.getBean("job", Job.class); 
      JobParameters jobParameters = context.getBean("jobParameters", JobParameters.class); 
     } 
    } 
Смежные вопросы