2011-01-26 22 views
8

Tôi đã làm việc với ứng dụng web với applicationContext.xml trong WEB-INF/config/applicationContext.xml. Bây giờ tôi cần phải thực hiện một số công cụ kiểm thử là ứng dụng độc lập, có thể sử dụng cùng một applicationContext.xml, nhưng có vấn đề với đường dẫn đến cấu hình cho lớp ClassPathXmlApplicationContext.Đường dẫn phải tới applicationContext.xml bằng ClassPathXmlApplicationContext

Tôi biết rằng khi tôi sao chép applicationContext.xml vào gói mặc định (nơi .java cư trú) tôi có thể sử dụng ClassPathXmlApplicationContext ("applicationContext.xml"), nhưng điều này có cần thiết không?

import org.apache.log4j.Logger; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AdminTool { 

    private Logger log = Logger.getLogger(getClass()); 

    /** all below doesn't work - FileNotFoundException) **/ 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml"); 

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

    public AdminTool() { 
     log.debug(ac); 
    } 

} 

Trả lời

12

Trong trường hợp thử nghiệm cục bộ, bạn không nằm trong Jar, vì vậy bạn không cần truy cập dựa trên Classpath. Sử dụng FileSystemXmlApplicationContext để thay thế.

Có lẽ một cái gì đó như thế này:

private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "src/WEB-INF/config/applicationContext.xml" 
    ); 

(đường dẫn là tương đối từ thư mục thực hiện)

+0

Tôi đã suy nghĩ về việc chạy AdminTool của mình bằng cách sử dụng webapp.war. Nó sẽ có thể sử dụng FileSystemXmlApplicationContext? – marioosh

+0

@marioosh Không, trong một cuộc chiến bạn có những vấn đề tương tự như trong một cái lọ: không có tệp nào, chỉ là các mục nhập. Chiến tranh có được triển khai trong một thùng chứa servlet hay cục bộ không? –

+0

@Patrick Tôi muốn sử dụng lớp AdminTool từ .war mà không cần triển khai. PS: Tôi có dự án maven: FileSystemXmlApplicationContext mới ("src/main/webapp/WEB-INF/config/applicationContext.xml"); hoạt động khi tôi chạy AdminTool trong Eclipse – marioosh

1
private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "/WEB-INF/config/applicationContext.xml" 
    ); 
3

Đây là lý do tại sao tôi thích để đưa tất cả các file cấu hình trong lớp thư mục. Trong thực tế, bằng cách sử dụng Maven, bạn có thể đặt tất cả các tệp này trong src/main/resources. Sau đó, trong các tệp thử nghiệm của bạn, bạn có thể truy cập dưới dạng 'classpath: applicationContext.xml'.

0
private static final ApplicationContext ac = 
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml" 
); 
+2

Vui lòng giải thích tại sao mã bên dưới có vấn đề so với mã trên. – Phani

-1

vui lòng chuyển đến thuộc tính> Đường dẫn xây dựng Java> Nguồn dự án của bạn kiểm tra đường dẫn lớp và thêm thư mục trước WEB-INF trong đường dẫn lớp. chắc chắn nó hoạt động

Các vấn đề liên quan